整个逻辑是怎么样的,web端如何发起请求,服务器端如何处理多个不同的用户间的聊天。
题主是用原声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格式的数据
有问题 再留言
推荐使用socket.io,里面可以方便的指定特定的人进行发送消息
其实原理很简单,服务器保存好所有的 Client->Server 的 Socket 连接,Client A 发送消息给 Client B 的实质是:Client A -> Server -> Client B
。
即 Client A 发送类似 {from:'Client A', to:'Client B', body: 'hello'}
的数据给 Server。Server 接收数据根据 to
值找到 Client B 的 Socket 连接并将消息转发给 Client B。
你可以设计一个简单的数据结构,然后放到websocket里发出去。
websocket.send('srcUser,dstUser,time,message')