Я начинаю с socket.io + node.js, я знаю, как отправить сообщение локально и использовать socket.broadcast.emit()
функцию широковещания : - все подключенные клиенты получают одно и то же сообщение.
Теперь я хотел бы знать, как отправить личное сообщение конкретному клиенту, я имею в виду один сокет для частного чата между двумя людьми (поток клиент-клиент). Спасибо.
Ответы:
Когда пользователь подключается, он должен отправить сообщение на сервер с именем пользователя, которое должно быть уникальным, например, электронное письмо.
Пара имени пользователя и сокета должна храниться в таком объекте:
На клиенте отправьте объект на сервер со следующими данными:
На сервере слушайте сообщения. Когда сообщение получено, отправьте данные получателю.
На клиенте прислушивайтесь к исходящим сообщениям с сервера, называемого «ReceiveMessage», и, читая данные, вы можете определить, от кого они пришли и какое сообщение было отправлено.
источник
Вы можете использовать комнаты socket.io. Со стороны клиента отправьте событие («присоединиться» в данном случае может быть что угодно) с любым уникальным идентификатором (адрес электронной почты, id).
Сторона клиента:
Теперь со стороны сервера используйте эту информацию, чтобы создать уникальную комнату для этого пользователя.
На стороне сервера:
Итак, теперь каждый пользователь присоединился к комнате, названной в честь электронной почты пользователя. Поэтому, если вы хотите отправить сообщение конкретному пользователю, вам просто нужно
На стороне сервера:
Последнее, что осталось сделать на стороне клиента, - это прослушать событие "new_msg".
Сторона клиента:
Надеюсь, вы уловили идею.
источник
socket.io-redis
.{email: user1@example.com}
разные соединения для всех подключений? Разве у всех клиентов, которые переходят в приложение, есть пользователь,user1@example.com
как бы мне сделать его пользователемuser2@example.com
для второго подключающегося клиента, чтобы у меня были разные комнаты. извините, если это надоедливый вопрос.УВЕРЕН: просто,
Это то, что вам нужно :
всякий раз, когда пользователь присоединяется к серверу, детали сокета будут генерироваться, включая ID. Этот идентификатор действительно помогает отправить сообщение определенным людям.
сначала нам нужно сохранить все socket.ids в массиве,
здесь name - имя получателя. Пример:
Итак, теперь мы можем получить этот socket.id с именем получателя всякий раз, когда мы отправляем сообщение:
для этого нам нужно знать имя получателя. Вам необходимо передать на сервер имя получателя.
последнее:
Надеюсь, это сработает для вас.
Удачи!!
источник
Вы можете обратиться к комнатам socket.io . Когда вы установили соединение с сокетом - вы можете присоединиться к нему в названной комнате, например "user. # {Userid}".
После этого вы можете отправить личное сообщение любому клиенту по удобному имени, например:
В операции выше мы отправляем «new_message» пользователю «125».
Спасибо.
источник
В проекте нашей компании мы используем подход «комнат», и его имя представляет собой комбинацию идентификаторов пользователей всех пользователей в разговоре в качестве уникального идентификатора (наша реализация больше похожа на мессенджер facebook), например:
| id | имя | 1 | Скотт | 2 | Сьюзен
Имя "room" будет "1-2" (идентификаторы упорядочены по возрастанию) и при отключении socket.io автоматически очищает комнату
таким образом вы отправляете сообщения только в эту комнату и только онлайн (подключенным) пользователям (меньше пакетов, отправляемых через сервер).
источник
Позвольте мне сделать это проще с помощью комнат socket.io. запросить сервер с уникальным идентификатором для присоединения к серверу. здесь мы используем электронную почту в качестве уникального идентификатора.
Клиент Socket.io
Когда пользователь присоединился к серверу, создайте для этого пользователя комнату
Сервер Socket.io
Теперь мы готовы к присоединению. позвольте передать что-то из серверной
to
, чтобы пользователь мог слушать.Сервер Socket.io
Давайте доработаем тему прослушиванием
message
события на стороне клиентаСсылка из Socket.io rooms
источник