2016-12-19 114 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