在Node.js中使用WebSocket向指定用户发送消息需要以下步骤:

  1. 在用户登录时,生成一个唯一的token,并将token与用户ID绑定,保存在服务器端的数据库或缓存中。

  2. 当客户端连接WebSocket时,客户端需要将该token发送给服务器,以便服务器可以验证用户身份。

  3. 在服务器端,当收到客户端发送的消息时,服务器需要验证该消息的发送者是否有权限向指定的用户发送消息。可以通过解析消息中携带的token,获取发送者的用户ID,并验证该用户ID是否有权限向指定的用户发送消息。

  4. 如果发送者有权限向指定的用户发送消息,则服务器可以向指定的用户发送消息。可以通过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);
  });
});
``
nodejs中websocket怎么通过携带的token向指定的用户发送消息

原文地址: https://www.cveoy.top/t/topic/fJ0r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录