websocket实现一对一
时间: 2023-08-26 13:16:22 浏览: 99
socket实现一对一通信
要实现 WebSocket 的一对一通信,您需要为每个客户端连接创建唯一的标识符(例如用户 ID),并使用这个标识符来区分不同的连接。以下是一个简单的示例代码,演示了如何使用 WebSocket 实现一对一通信:
服务器端代码(使用 Node.js 和 Express):
```javascript
const express = require('express');
const WebSocket = require('ws');
const app = express();
const server = app.listen(3000, () => {
console.log('服务器已启动,端口号:3000');
});
const wss = new WebSocket.Server({ server });
// 存储客户端连接
const clients = new Map();
wss.on('connection', (ws) => {
// 生成唯一的客户端 ID
const clientId = generateClientId();
// 将客户端连接存储到 Map 中
clients.set(clientId, ws);
// 发送客户端 ID 给客户端
ws.send(JSON.stringify({ type: 'clientId', data: clientId }));
// 监听客户端消息
ws.on('message', (message) => {
const parsedMessage = JSON.parse(message);
const { type, recipientId, data } = parsedMessage;
// 根据消息的类型和接收者 ID,将消息发送给指定的客户端
if (type === 'directMessage') {
const recipientSocket = clients.get(recipientId);
if (recipientSocket) {
recipientSocket.send(JSON.stringify({ type: 'directMessage', senderId: clientId, data }));
}
}
});
// 监听客户端关闭连接
ws.on('close', () => {
// 从 Map 中移除已关闭的客户端连接
clients.delete(clientId);
});
});
// 生成随机的客户端 ID
function generateClientId() {
return Math.random().toString(36).substr(2, 9);
}
```
客户端代码(浏览器端):
```javascript
const ws = new WebSocket('ws://服务器地址:端口号');
ws.onopen = function() {
console.log('WebSocket 连接已建立');
};
ws.onmessage = function(event) {
const message = JSON.parse(event.data);
if (message.type === 'clientId') {
// 收到客户端 ID,保存到本地
const clientId = message.data;
console.log('我是客户端 ' + clientId);
} else if (message.type === 'directMessage') {
// 收到直接消息,显示在页面上
const senderId = message.senderId;
const data =
阅读全文