题主是用原声net模块,还是socket.io呢,这里假设题主用了socket.io(不想用怎么办?看下socket.io的源码,自己实现个客户端socket连接队列)
server.js
var
io = require('socket.io'),
ioServer = io.listen(8000),
sequence = 1;
clients = [];
// 每一个新的client都会触发connection事件,将其push到clients队列,广播到所有客户端,更新在线人员列表:
ioServer.on('connection', function(socket) {
console.info('New client connected (id=' + socket.id + ').');
clients.push(socket);
freshClients();
// 断开时从clients移除,并广播到所有客户端,更新在线用户列表
socket.on('disconnect', function() {
var index = clients.indexOf(socket);
if (index != -1) {
clients.splice(index, 1);
console.info('Client disconnet (id=' + socket.id + ').');
freshClients();
}
});
});
ioServer.on('message',function(socket,message){
var id = message.split(":")[0];
var message = message.split(":")[1];
clients.find(function(c){return c.id == id}).emit('message',message);
});
function freshClients(){
ioServer.clients.emit('freshClients', clients.map(function(c){return c.id}));
}
简单手打的代码,可能有问题,具体参考socket.io的文档
对应的客户端,就只需要监听freshClients事件,更新在线用户列表,然后选择指定id,向服务器发送形如id:message格式的数据