Чтобы отправить что-то всем клиентам, вы используете:
io.sockets.emit('response', data);
Для получения от клиентов вы используете:
socket.on('cursor', function(data) {
...
});
Как я могу объединить эти два, чтобы при получении сообщения на сервере от клиента я отправлял это сообщение всем пользователям, кроме одного, отправляющего сообщение?
socket.on('cursor', function(data) {
io.sockets.emit('response', data);
});
Нужно ли взламывать его, отправляя идентификатор клиента вместе с сообщением, а затем проверяя на стороне клиента, или есть более простой способ?
javascript
node.js
socket.io
Switz
источник
источник
io
толькоsocket
// sending to all clients except sender
, что использовать для// sending a response to sender client only
?socket.to('others').emit('an event', { some: 'data' });
также вещает в комнате.Из ответа @LearnRPG, но с 1.0:
Чтобы ответить на комментарий @Crashalot,
socketid
приходит от:источник
socketid
за отправку в отдельный сокет?socket.id
из вашего объекта сокета.Вот более полный ответ о том, что изменилось с 0.9.x до 1.x.
Я хотел отредактировать пост @soyuka, но мой отзыв был отклонен рецензированием.
источник
broadcast.emit отправляет сообщение всем остальным клиентам (кроме отправителя)
источник
Испускать шпаргалку
источник
Для пространств имен в комнатах зацикливание списка клиентов в комнате (аналогично ответу Nav) - это один из двух подходов, которые я нашел, которые будут работать. Другой - использовать исключение. НАПРИМЕР
источник
Другие случаи
источник
Обновлен список для дальнейшей документации.
Надеюсь это поможет.
источник
используйте эту кодировку
этот socket.broadcast.emit () будет испускать все что угодно в функции, кроме сервера, который испускает
источник
io
внутрь этого, если обратный вызов определен в файле пыльникаio
как глобальныйЯ использую пространства имен и комнаты - я нашел
работать где
не
(если кто-то еще сталкивается с этой проблемой)
источник