Ich implementiere socket.io in node.js für ein Windows Azure-Projekt. Ich muss in regelmäßigen Abständen Daten an alle angeschlossenen Clients senden.Multi Threading in Node.js?
Ich bin neu bei node.js, aber ich denke, Multi-Threading ist nicht möglich. Der Zweck von socket.io ist die Unterstützung von Echtzeit-Anwendungen, gibt es also eine Möglichkeit, Daten kontinuierlich an alle meine verbundenen Clients in regelmäßigen Abständen zu senden und auch alle Daten zu verarbeiten, die die Clients gleichzeitig an den Server socket.io senden?
EDIT:
Dies ist in etwa meine socket.io Implementierung
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('first', "connected");
socket.on('clientData', function (data) {
//processing the data
});
});
function requestQueue() {
// some processing
io.sockets.emit('broadcast', recordsQueue);
// should go to sleep for a time period
}
Im Grunde möchte ich werden die Request Verfahren kontinuierlich wie ein roter Faden läuft, die Daten an die angeschlossenen Clients in bestimmten Intervallen emittieren. Und auch wenn der Client irgendwelche Daten an das Ereignis "clientData" sendet, sollte ich in der Lage sein, die Daten zu empfangen und zu verarbeiten.
Irgendeine Idee, wie ich es tun kann?
Dank
Meine Lösung:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.emit('first', "connected");
socket.on('clientData', function (data) {
//processing the data
});
});
function requestQueue() {
var sleepTime = 0;
// calcuate sleepTime
io.sockets.emit('broadcast', recordsQueue);
// should go to sleep for a time period
if(sleepTime !=0)
setTimeout(function() { requestQueue() }, sleepTime);
}
Vielen Dank für die Antworten! setInterval hat mein Problem gelöst, aber ja, meine requestQueue-Methode macht ein paar schwere Berechnungen und bin besorgt, dass die Leistung von socket.io-Anfragen, die der Client macht, davon betroffen sein wird. Ich würde es sehr schätzen, wenn Sie ein wenig auf Ihrer Randnotiz arbeiten könnten, vielleicht mit einem Code-Snippet oder einem Link, wenn möglich. Danke vielmals! – Bitsian
Nun, dies ist ein wiederkehrendes Problem für Single-Thread-Anwendungen oder Anwendungen, die nur einen einzigen Thread für eine bestimmte Aufgabe gewidmet haben. Beispielsweise können Windows-Front-End-Anwendungen nur einen einzigen UI-Thread haben. Daher müssen Sie sehr sorgfältig darauf achten, dass lange laufende Berechnungen in einen anderen Thread/Prozess/etc ausgelagert werden, um die Haupt-GUI-Nachrichtenpumpe nicht zu unterbrechen. Der Knoten hat eine ähnliche Einschränkung, da er nur einen einzigen Ausführungs-Thread hat, obwohl es viele nicht-blockierende E/A geben kann, da diese Arbeit unabhängig vom Ausführungs-Thread erfolgt. –
Hier ist eine SO Frage über lang laufende Berechnungen in Knoten, die helfen können: http://StackOverflow.com/Questions/3809165/Long-Running-Computations-in-Node-Js –