2016-06-27 11 views
0

Ich versuche, ein effizientes Streaming node.js App zu erstellen, in dem der Server auf eine stream (verkappte Sammlung) in MongoDB mit mongoose und dann emittieren den Strom direkt an den Client-Browser in Verbindung bringen würde .Effiziente Socket.io Verteilung mit Mongoose Strom

Worüber ich besorgt bin, ist die Skalierbarkeit meines Designs. Lassen Sie mich wissen, wenn ich falsch liege, aber es scheint, dass gerade jetzt für jeden neuen Webbrowser, der geöffnet wird, eine neue Verbindung zu MongoDB geöffnet wird (es wird die zuvor verwendete Verbindung nicht wiederverwenden) und daher Es wird viele Ineffizienzen geben, wenn ich viele Benutzer gleichzeitig verbunden habe. Wie kann ich das verbessern?

Ich denke an einen Server - mehrere Client-Typ von Design in socket.io, aber ich weiß nicht, wie das zu erreichen ist.

-Code unten:

Server-Seite (app.js):

io.on('connection', function (socket) { 
    console.log("connected!"); 
    var stream = Json.find().lean().tailable({ "awaitdata": true, numberOfRetries: Number.MAX_VALUE}).stream(); 
    stream.on('data', function(doc){ 
    socket.emit('rmc', doc); 
    }).on('error', function (error){ 
    console.log(error); 
    }).on('close', function() { 
    console.log('closed'); 
    }); 
}); 

Client-Seite (index.html):

socket.on('rmc', function(json) { 
    doSomething(); // it just displays the data on the screen 
}); 

Antwort

1

Leider wird dies nicht nur auf Mongo Leistung abhängen. es sei denn, Sie haben einen hohen Grad an Gleichzeitigkeit (+1000 Streams), sollten Sie sich nicht um Mongo kümmern (im Moment).

weil mit dieser Art von App haben Sie größere Probleme Beispiel: der Datentyp und die Komprimierung, Pufferüberläufe, Bandbreitenlimit, Socket.io Grenzen, OS Grenzen. Dies sind die Probleme, mit denen Sie wahrscheinlich zuerst konfrontiert werden.

jetzt, um Ihre Frage zu beantworten. Soweit ich weiß, nennst du keine Verbindung zu Mongo pro Benutzer. Die Benutzer sind mit der App und nicht mit der Datenbank verbunden. Die App ist mit der Datenbank verbunden.

schließlich werden diese Links helfen zu verstehen, und Ihre Anfragen für diese Art von Job zwicken (Streaming)

https://github.com/Automattic/mongoose/issues/1248

https://codeandcodes.com/tag/mongoose-vs-mongodb-native/

http://drewww.github.io/socket.io-benchmarking/

hoffe, es hilft!