我在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