Sails.js + socket.io: отправка сообщений с сервера на клиенты

Я пытаюсь настроить систему с sails.js, чтобы сервер передавал сообщения нескольким клиентам. В принципе:

  1. Клиент в группе A отправляет запрос AJAX на сервер.
  2. Сервер обрабатывает запрос и отправляет сообщение через сокет всем клиентам группы B.
  3. Клиенты группы B получают сообщение через сокет и отображают что-то.

Согласно документации по socket.io, я должен иметь возможность присоединять клиентов в группе B к "комнате", а затем транслировать сервер в эту конкретную комнату, но на стороне клиента ранее существующий "сокет" не есть метод "socket.join('room')". Итак, я попытался отправить уникальное событие всем клиентам:

socket.on("connect", function(){
  console.log("Client Connected");
});

socket.on("my_event", function(data){
  console.log("my_event received");
});

Это прекрасно работает, выполняя "sails.io.sockets.emit("my_event", {...})" на стороне сервера, но не отправляет ли это событие каждому клиенту? Я мог бы сделать имя события уникальным, что-то вроде "my_event_000" с идентификатором для указания группы, но это все равно будет отправлять события каждому клиенту без необходимости.

Должен ли я использовать "комнаты"? И если да, то как?

1 ответ

Способ Sails сделать это - иметь модель, поддерживающую ваши "Группы", а в действии контроллера иметь сокет, подписывающийся на группу с Group.subscribe(groupId, req.socket), Затем вы можете отправлять сообщения в определенную группу с Group.publish(groupId, data),

Вы также можете подписаться на произвольное название комнаты в контроллере, используя req.listen(groupId)и транслировать в эту комнату с req.broadcast(roomName, data),

Это все в документации Sails для работы с сокетами!

Другие вопросы по тегам