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
的用户。我该怎么做?
我可以 listen
到 frontend
中的事件,而不是如果我只能将消息 psh 到特定的连接类别会更好。
好吧,正如我在这里看到的,您无权访问服务器 socket.io 对象中的某些查询参数。您需要对用户进行分组,有 3 个选项:
- 命名空间
- 房间
- 具有管理令牌的用户套接字 ID 的死简单数组
您可以阅读每个或它们的具体细节,然后选择更适合您的情况。
之后,您可以向特定房间、命名空间或与管理员相关的 ID 数量发出任何事件!
我有 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
的用户。我该怎么做?
我可以 listen
到 frontend
中的事件,而不是如果我只能将消息 psh 到特定的连接类别会更好。
好吧,正如我在这里看到的,您无权访问服务器 socket.io 对象中的某些查询参数。您需要对用户进行分组,有 3 个选项:
- 命名空间
- 房间
- 具有管理令牌的用户套接字 ID 的死简单数组
您可以阅读每个或它们的具体细节,然后选择更适合您的情况。
之后,您可以向特定房间、命名空间或与管理员相关的 ID 数量发出任何事件!