socket io 加node 如何实现私聊
时间: 2024-05-16 20:17:03 浏览: 7
使用 Socket.IO 和 Node 实现私聊需要以下步骤:
1. 在客户端连接 Socket.IO 服务器时,将客户端的唯一标识符(例如用户名)发送给服务器。
2. 在服务器端,保存每个连接的客户端唯一标识符和 Socket.IO 实例之间的映射。
3. 当客户端发送私人消息时,将消息和接收者的唯一标识符发送到服务器。
4. 在服务器端,使用接收者的唯一标识符查找其 Socket.IO 实例,并使用该实例发送消息。
以下是一个示例代码:
客户端:
```javascript
// 连接 Socket.IO 服务器
const socket = io.connect('http://localhost:3000');
// 发送用户名
socket.emit('setUsername', 'Alice');
// 发送私人消息
socket.emit('privateMessage', {to: 'Bob', message: 'Hello Bob!'});
```
服务器端:
```javascript
const io = require('socket.io')(3000);
// 存储客户端唯一标识符和 Socket.IO 实例之间的映射
const clients = {};
io.on('connection', (socket) => {
console.log('a user connected');
// 监听客户端发送的 setUsername 事件
socket.on('setUsername', (username) => {
console.log(`user ${username} connected`);
clients[username] = socket;
});
// 监听客户端发送的 privateMessage 事件
socket.on('privateMessage', ({to, message}) => {
// 查找接收者的 Socket.IO 实例
const receiver = clients[to];
if (receiver) {
// 发送私人消息
receiver.emit('privateMessage', {from: socket.username, message});
} else {
console.log(`user ${to} not found`);
}
});
});
```
在上面的代码中,客户端连接 Socket.IO 服务器时,发送其用户名并将其存储在服务器端。当客户端发送私人消息时,服务器使用接收者的唯一标识符查找其 Socket.IO 实例,并使用该实例发送消息。