我在node.js中为Windows Azure项目实现socket.io。我必须定期向所有连接的客户端发送数据。Node.js中的多线程?
我是新来的node.js,但我想多线程是不可能的。 socket.io的目的是为了支持实时应用程序,所以有什么方法可以将数据连续不断地发送给所有连接的客户端,并同时处理客户端同时发送到socket.io服务器的任何数据?
编辑:
这大约是我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
}
基本上我想要的请求队列方法,不断就像一个线程,这会在特定的时间间隔发射数据连接的客户端运行。而且,如果客户端发送任何数据到“clientData”事件,那么我应该能够接收数据并处理它。
任何想法,我怎么能做到这一点?
感谢
我的解决办法:
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);
}
谢谢大家的答案! setInterval已经解决了我的问题,但是,我的requestQueue方法做了一些繁重的计算,并且担心客户端发出的socket.io请求的性能会受到它的影响。如果你可以在你的附注中详细说明一下,或许可以使用代码片段或可能的链接,我会非常感激。非常感谢! – Bitsian 2013-03-21 07:32:46
好吧,对于单线程应用程序或只有一个线程专用于特定任务的应用程序,这是一个反复出现的问题。例如,Windows前端应用程序只能有一个UI线程,所以必须非常小心,以确保将任何长时间运行的计算卸载到不同的线程/进程/等,以避免中断主GUI消息泵。节点有一个类似的约束,它只有一个执行线程,尽管可以有很多非阻塞I/O,因为这个工作独立于执行线程而发生。 – 2013-03-21 14:43:01
下面是一个SO质疑有关长期运行在节点的计算,可以帮助:http://stackoverflow.com/questions/3809165/long-running-computations-in-node-js – 2013-03-21 14:45:02