Sails.js + socket.io: отправка сообщений с сервера на клиенты
Я пытаюсь настроить систему с sails.js, чтобы сервер передавал сообщения нескольким клиентам. В принципе:
- Клиент в группе A отправляет запрос AJAX на сервер.
- Сервер обрабатывает запрос и отправляет сообщение через сокет всем клиентам группы B.
- Клиенты группы 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 для работы с сокетами!