socket.io 多人私聊
时间: 2023-05-31 10:04:09 浏览: 147
要实现socket.io多人私聊,需要在服务器端和客户端分别进行一些修改。
在服务器端,需要为每个连接保持一个唯一的ID,并将其存储在一个对象中。例如:
```
var users = {};
io.on('connection', function(socket) {
// 生成唯一ID
var userId = socket.id;
// 将ID存储在users对象中
users[userId] = socket;
// 处理私聊消息
socket.on('private message', function(data) {
var targetId = data.targetId;
var message = data.message;
// 将消息发送给目标用户
users[targetId].emit('private message', { message: message, senderId: userId });
});
// 处理断开连接
socket.on('disconnect', function() {
// 从users对象中删除用户
delete users[userId];
});
});
```
在客户端,需要为私聊创建一个独立的房间,以便只有发送者和接收者能够收到消息。例如:
```
// 发送私聊消息
socket.emit('private message', { targetId: targetUserId, message: message });
// 监听私聊消息
socket.on('private message', function(data) {
var message = data.message;
var senderId = data.senderId;
// 如果是发送者,将消息显示在发送者的聊天窗口中
if (senderId === socket.id) {
// 显示消息
} else {
// 如果是接收者,将消息显示在接收者的聊天窗口中
// 创建房间名,以targetUserId和socket.id的较小值为房间名
var roomId = Math.min(targetUserId, socket.id);
// 加入房间
socket.join(roomId);
// 显示消息
}
});
```
在这个例子中,每个私聊对话都会创建一个独立的房间,以便只有发送者和接收者能够收到消息。每个房间的名称都是由发送者和接收者的ID组成的,以较小的值作为房间名。这样可以确保在两个用户之间的所有私聊都会创建一个独立的房间。
阅读全文