Socket.io 对选定的连接发出响应

Socket.io emit response to selected connections

我有 2 种类型的用户连接到 Socket,1. 管理员,2. 用户

我想 emit 一些 event 只给管理员 connections。在连接到套接字时,我发送 query 如下

var connectionOptions =  {
    "force new connection" : false,
    "reconnection": true,
    "reconnectionDelay": 2000,
    "reconnectionDelayMax" : 60000,
    "reconnectionAttempts": "Infinity",
    "timeout" : 10000,
    "transports" : ["websocket"],
    "query": {
        "is_admin": true,
        "token": TOKEN,
    }
  }

var socket = require('socket.io-client')(process.env.SOCKET, connectionOptions);

服务器端,我有一个功能可以检查管理员和用户令牌,并将它们连接到 Socket

io.use((socket, next) => {
    let query = socket.handshake.query;
    if(query.is_admin) someAdminAuth(query.token);
    else someUserAuth(query.token)
}).on('connection', (socket) => {

});

module.exports.sendSocket = (event_name, data) => {
    let str = io.sockets.query;
    console.log(str, "str")
    io.sockets.emit(event_name, data);
}

现在,我将在某处发出一个事件 NOTIFY_ADMIN 函数,所有 connections 都将获得该事件。但是我不想通知所有connections。我只想将 event 推送给拥有 is_admin: true 的用户。我该怎么做?

我可以 listenfrontend 中的事件,而不是如果我只能将消息 psh 到特定的连接类别会更好。

好吧,正如我在这里看到的,您无权访问服务器 socket.io 对象中的某些查询参数。您需要对用户进行分组,有 3 个选项:

  1. 命名空间
  2. 房间
  3. 具有管理令牌的用户套接字 ID 的死简单数组

您可以阅读每个或​​它们的具体细节,然后选择更适合您的情况。

之后,您可以向特定房间、命名空间或与管理员相关的 ID 数量发出任何事件!