扫码关注官方订阅号
整个逻辑是怎么样的,web端如何发起请求,服务器端如何处理多个不同的用户间的聊天。
光阴似箭催人老,日月如移越少年。
其实原理很简单,服务器保存好所有的 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。
Client A -> Server -> Client B
{from:'Client A', to:'Client B', body: 'hello'}
to
推荐使用socket.io,里面可以方便的指定特定的人进行发送消息
你可以设计一个简单的数据结构,然后放到websocket里发出去。
websocket.send('srcUser,dstUser,time,message')
题主是用原声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格式的数据
有问题 再留言
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
其实原理很简单,服务器保存好所有的 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。推荐使用socket.io,里面可以方便的指定特定的人进行发送消息
你可以设计一个简单的数据结构,然后放到websocket里发出去。
websocket.send('srcUser,dstUser,time,message')题主是用原声net模块,还是socket.io呢,这里假设题主用了socket.io(不想用怎么办?看下socket.io的源码,自己实现个客户端socket连接队列)
server.js
简单手打的代码,可能有问题,具体参考socket.io的文档
对应的客户端,就只需要监听freshClients事件,更新在线用户列表,然后选择指定id,向服务器发送形如id:message格式的数据
有问题 再留言