J'implémente socket.io dans node.js pour un projet Windows Azure. Je dois envoyer des données à tous les clients connectés à intervalles réguliers.Multi-threading dans Node.js?
Je suis nouveau sur node.js mais je suppose que le multi-thread n'est pas possible. Le but de socket.io est de prendre en charge les applications en temps réel, de sorte que je puisse envoyer des données en continu à tous mes clients connectés à intervalles réguliers et traiter toutes les données envoyées par les clients au serveur socket.io simultanément?
EDIT:
Ceci est à peu près ma mise en œuvre de socket.io
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
}
Essentiellement, je veux la méthode RequestQueue à exécuter en continu comme un fil, qui émettra des données aux clients connectés à des intervalles particuliers. Et aussi si le client envoie des données à l'événement "clientData", je devrais être en mesure de recevoir les données et de les traiter.
Une idée sur comment je peux le faire?
Merci
Ma solution:
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);
}
Merci à tous pour les réponses! setInterval a résolu mon problème, mais oui ma méthode requestQueue fait un peu de calculs lourds et je crains que les performances des requêtes socket.io effectuées par ce client en soient affectées. J'apprécierais vraiment que vous puissiez élaborer un peu sur votre note de côté, peut-être avec un fragment de code ou un lien si possible. Merci beaucoup! – Bitsian
Eh bien, c'est un problème récurrent pour les applications monothread ou les applications qui n'ont qu'un seul thread dédié à une tâche particulière. Par exemple, les applications frontales Windows ne peuvent avoir qu'un seul thread UI, vous devez donc être très prudent pour vous assurer que les calculs de longue durée sont déchargés vers un thread/process/etc différent pour éviter d'interrompre le pompage de messages GUI principal. Le noeud a une contrainte similaire en ce qu'il n'a qu'un seul thread d'exécution, bien qu'il puisse y avoir beaucoup d'E/S non bloquantes car ce travail a lieu indépendamment du thread d'exécution. –
Voici une question SO sur les calculs de longue durée dans le nœud qui peut aider: http://stackoverflow.com/questions/3809165/long-running-computations-in-node-js –