2016-12-19 115 views
0

我想用Node.js構建套接字服務器。服務器需要處理多個TCP連接。這裏是我的代碼:NodeJS如何使用套接字處理多個TCP連接

const HOST = '127.0.0.1'; 
const PORT = 5000; 

var app = require('net')(); 
var sleep = require('sleep'); 

var server = net.createServer().listen(PORT, HOST); 
server.on('connection', function(sock){ 
    console.log('CONNECTED: ' + sock.remoteAddress + ':' + sock.remotePort); 
    var c = 0; 
    while(true){ 
     sock.write(c.toString()+' '); 
     c++; 
     sleep.sleep(1); 
    } 
}); 
console.log('Server listening on ' + HOST + ':' + PORT); 

如何處理所有連接並行而不是排隊?謝謝:D

+0

'如何處理所有連接並行而不是排隊?'您'排隊'因爲喲你用這個'while(true)'阻塞了事件循環。這就是說,節點是單線程的,一切都是順序的,但速度足以讓人感覺它是//,對於真正的// ism,使用另一種語言如'go'。 –

回答

1

正如在評論中已經說過,您是阻塞事件循環與while(true),而不是嘗試使用setInterval代替,以達到想要的結果:

setInterval(function() { 
    sock.write(c.toString()+' '); 
    c++; 
}, 1000) 
+0

這個答案是我需要的。謝謝! – PikaCool

0

我不知道我理解你的問題。

但是每一個客戶端都會觸發server.on('connection'),只要用戶仍在那裏,這個請求將通過你的sock變量可用。與其試圖阻止服務器提醒用戶,您需要考慮基於事件的配置,該配置會包含兩種事件sock.on,它將從客戶端觸發事件併發送將發送數據的事件到目標客戶。

,所以你能想象這樣的事情

server.on('connection', function(sock){ 
    sock.on('event_name', function(data_received){ 
     // Some stuff 
    }); 
    sock.emit("connected", {"message", "Hi From the server"}); 
}); 

我覺得socket.io is a great place to start

+0

謝謝。當我用Java編寫它時,我曾經通過創建一個新線程來處理連接。 Java不是一種事件驅動的語言。 – PikaCool

+0

如果它可能會有幫助有一個Java套接字io客戶端:https://github.com/socketio/socket.io-client-java – fbhcf