Socket.io выдает ответ на выбранные соединения - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть 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. Я хочу Pu sh event только для пользователей, которые имеют is_admin: true. как я могу это сделать?

Я могу listen на событие в frontend, вместо этого, если я могу только p sh, сообщение с указанием c категории соединения будет лучше.

1 Ответ

1 голос
/ 09 апреля 2020

Ну, как я вижу здесь, у вас нет доступа к некоторым параметрам запроса в объекте server socket.io. Вам нужно сгруппировать пользователей, и есть 3 варианта:

  1. Пространство имен
  2. Комната
  3. Мертвый простой массив идентификаторов сокетов пользователей с токеном администратора

Вы можете прочитать подробные c подробности по каждому или по ним и выбрать то, что больше подходит для вашего случая.

После этого вы можете генерировать любое событие для указания c комнаты, пространства имен или количества идентификаторов, связанных с администраторами!

...