Estou começando com socket.io + node.js, sei enviar uma mensagem localmente e transmitir a socket.broadcast.emit()
função: - todos os clientes conectados recebem a mesma mensagem.
Agora, gostaria de saber como enviar uma mensagem privada para um determinado cliente, ou seja, um soquete para um bate-papo privado entre 2 pessoas (fluxo cliente-para-cliente). Obrigado.
Respostas:
Quando um usuário se conecta, ele deve enviar uma mensagem ao servidor com um nome de usuário que deve ser único, como um e-mail.
Um par de nome de usuário e soquete deve ser armazenado em um objeto como este:
No cliente, emita um objeto para o servidor com os seguintes dados:
No servidor, ouça as mensagens. Quando uma mensagem for recebida, emita os dados para o receptor.
No cliente, escute as emissões do servidor chamado 'receivedMessage' e, lendo os dados, você pode identificar de quem eles vieram e a mensagem que foi enviada.
fonte
Você pode usar salas socket.io. Do lado do cliente, emita um evento ("join", neste caso, pode ser qualquer coisa) com qualquer identificador único (e-mail, id).
Lado do cliente:
Agora, do lado do servidor, use essas informações para criar uma sala exclusiva para esse usuário
Lado do servidor:
Então, agora cada usuário entrou em uma sala com o nome do e-mail do usuário. Então, se você quiser enviar uma mensagem para um usuário específico, você só precisa
Lado do servidor:
A última coisa que resta a fazer no lado do cliente é ouvir o evento "new_msg".
Lado do cliente:
Espero que você tenha a idéia.
fonte
socket.io-redis
.{email: [email protected]}
diferente para todas as conexões não[email protected]
seriam todos os clientes que vão para o aplicativo ter usuário como eu faria[email protected]
para o segundo cliente que se conecta para que eu pudesse ter salas diferentes. desculpe se esta é uma pergunta irritante.CERTO: Simplesmente,
Isto é o que você precisa :
sempre que um usuário ingressar no servidor, os detalhes do soquete serão gerados, incluindo o ID. Este é o ID realmente ajuda a enviar uma mensagem para pessoas específicas.
primeiro precisamos armazenar todos os socket.ids no array,
aqui name é o nome do receptor. Exemplo:
Então, agora podemos obter esse socket.id com o nome do receptor sempre que estivermos enviando a mensagem:
para isso, precisamos saber o nome do destinatário. Você precisa emitir o nome do receptor para o servidor.
a última coisa é:
Espero que funcione bem para você.
Boa sorte!!
fonte
Você pode se referir a salas socket.io . Quando você apertou o soquete - você pode juntá-lo a uma sala nomeada, por exemplo "user. # {Userid}".
Depois disso, você pode enviar mensagem privada para qualquer cliente por nome conveniente, por exemplo:
Na operação acima, enviamos "nova_mensagem" ao usuário "125".
obrigado.
fonte
Em um projeto de nossa empresa, estamos usando a abordagem de "salas" e seu nome é uma combinação de IDs de usuário de todos os usuários em uma conversa como um identificador único (nossa implementação é mais parecida com o Facebook Messenger), exemplo:
| id | nome | 1 | Scott | 2 | Susan
O nome da "sala" será "1-2" (os ids são ordenados Asc.) e ao desconectar o soquete.io limpa automaticamente a sala
desta forma, você envia mensagens apenas para aquela sala e apenas para usuários online (conectados) (menos pacotes enviados através do servidor).
fonte
Deixe-me simplificar com as salas socket.io. solicitar um servidor com um identificador exclusivo para ingressar em um servidor. aqui estamos usando um e-mail como identificador único.
Cliente Socket.io
Quando o usuário entrar em um servidor, crie uma sala para esse usuário
Server Socket.io
Agora estamos prontos com a união. deixe emitir algo da
to
sala do servidor , para que o usuário possa ouvir.Server Socket.io
Vamos finalizar o tópico ouvindo o
message
evento para o lado do clienteA referência dos quartos Socket.io
fonte