首页 > 如何用websocket实现与好友列表中的指定好友聊天?

如何用websocket实现与好友列表中的指定好友聊天?

整个逻辑是怎么样的,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')

【热门文章】
【热门文章】