nodejs中websocket怎么通过携带的token向指定的用户发送消息
在Node.js中使用WebSocket向指定用户发送消息需要以下步骤:
-
在用户登录时,生成一个唯一的token,并将token与用户ID绑定,保存在服务器端的数据库或缓存中。
-
当客户端连接WebSocket时,客户端需要将该token发送给服务器,以便服务器可以验证用户身份。
-
在服务器端,当收到客户端发送的消息时,服务器需要验证该消息的发送者是否有权限向指定的用户发送消息。可以通过解析消息中携带的token,获取发送者的用户ID,并验证该用户ID是否有权限向指定的用户发送消息。
-
如果发送者有权限向指定的用户发送消息,则服务器可以向指定的用户发送消息。可以通过WebSocket的send方法向指定的用户发送消息。
下面是一个简单的示例代码:
const WebSocket = require('ws');
const jwt = require('jsonwebtoken');
const wss = new WebSocket.Server({ port: 8080 });
// 模拟从数据库或缓存中获取token对应的用户ID
const getUserIdByToken = (token) => {
const decoded = jwt.verify(token, 'secret');
return decoded.userId;
};
// 保存所有连接的WebSocket客户端对象
const clients = new Map();
wss.on('connection', (ws, req) => {
// 获取客户端携带的token
const token = req.headers.authorization.split(' ')[1];
// 验证token
const userId = getUserIdByToken(token);
if (!userId) {
// 如果token无效,则关闭WebSocket连接
ws.close();
return;
}
// 将WebSocket客户端对象保存到Map中
clients.set(userId, ws);
ws.on('message', (message) => {
try {
const { toUserId, content } = JSON.parse(message);
// 验证发送者是否有权限向指定的用户发送消息
if (clients.has(userId) && clients.has(toUserId)) {
// 向指定的用户发送消息
clients.get(toUserId).send(JSON.stringify({
fromUserId: userId,
content,
}));
}
} catch (error) {
console.error(error);
}
});
ws.on('close', () => {
// 从Map中移除WebSocket客户端对象
clients.delete(userId);
});
});
``
原文地址: https://www.cveoy.top/t/topic/fJ0r 著作权归作者所有。请勿转载和采集!