Ich beginne mit socket.io + node.js und weiß, wie man eine Nachricht lokal sendet und wie man eine socket.broadcast.emit()
Funktion sendet : - Alle verbundenen Clients erhalten dieselbe Nachricht.
Jetzt möchte ich wissen, wie man eine private Nachricht an einen bestimmten Client sendet. Ich meine einen Socket für einen privaten Chat zwischen zwei Personen (Client-zu-Client-Stream). Vielen Dank.
Antworten:
Wenn ein Benutzer eine Verbindung herstellt, sollte er eine Nachricht mit einem Benutzernamen an den Server senden, der eindeutig sein muss, z. B. eine E-Mail.
Ein Paar aus Benutzername und Socket sollte in einem Objekt wie dem folgenden gespeichert werden:
Senden Sie auf dem Client ein Objekt mit den folgenden Daten an den Server:
Warten Sie auf dem Server auf Nachrichten. Wenn eine Nachricht empfangen wird, senden Sie die Daten an den Empfänger.
Warten Sie auf dem Client auf Emits vom Server mit dem Namen "receiveMessage". Durch Lesen der Daten können Sie festlegen, von wem sie stammen und welche Nachricht gesendet wurde.
quelle
Sie können socket.io Räume verwenden. Auf der Clientseite wird ein Ereignis (in diesem Fall "Beitritt" kann alles sein) mit einer eindeutigen Kennung (E-Mail, ID) ausgegeben.
Kundenseite:
Verwenden Sie diese Informationen nun von der Serverseite aus, um einen eindeutigen Raum für diesen Benutzer zu erstellen
Serverseite:
Jetzt ist jeder Benutzer einem Raum beigetreten, der nach der E-Mail-Adresse des Benutzers benannt ist. Wenn Sie also einem bestimmten Benutzer eine Nachricht senden möchten, müssen Sie dies nur tun
Serverseite:
Das Letzte, was auf der Clientseite noch zu tun ist, ist das Abhören des Ereignisses "new_msg".
Kundenseite:
Ich hoffe du kommst auf die Idee.
quelle
socket.io-redis
.{email: [email protected]}
für alle Verbindungen? Nicht alle Clients, die zur App gehen, haben Benutzer.[email protected]
Wie würde ich sie[email protected]
für den zweiten Client, der eine Verbindung herstellt, zum Benutzer machen , damit ich unterschiedliche Räume haben kann? Entschuldigung, wenn dies eine nervige Frage ist.SICHER: Einfach,
Das brauchen Sie:
Wenn ein Benutzer dem Server beitritt, werden Socket-Details einschließlich der ID generiert. Dies ist die ID, die wirklich hilft, eine Nachricht an bestimmte Personen zu senden.
Zuerst müssen wir alle socket.ids im Array speichern.
Hier ist der Name des Empfängers. Beispiel:
Jetzt können wir diese socket.id mit dem Empfängernamen abrufen, wenn wir eine Nachricht senden:
Dazu müssen wir den Empfängernamen kennen. Sie müssen den Empfängernamen an den Server senden.
Das Letzte ist:
Hoffe das funktioniert gut für dich.
Viel Glück!!
quelle
Sie können sich auf socket.io Räume beziehen . Wenn Sie die Steckdose mit der Hand schütteln, können Sie ihn in einen benannten Raum einbinden, zum Beispiel "Benutzer. # {Benutzer-ID}".
Danach können Sie eine private Nachricht unter einem geeigneten Namen an einen beliebigen Client senden, zum Beispiel:
Im obigen Vorgang senden wir "new_message" an den Benutzer "125".
Vielen Dank.
quelle
In einem Projekt unseres Unternehmens verwenden wir den "Räume" -Ansatz. Der Name ist eine Kombination der Benutzer-IDs aller Benutzer in einer Konversation als eindeutige Kennung (unsere Implementierung ähnelt eher dem Facebook Messenger). Beispiel:
| id | Name | 1 | Scott | 2 | Susan
Der Name "Raum" lautet "1-2" (IDs werden als Asc bestellt) und beim Trennen der Steckdose wird der Raum automatisch aufgeräumt
Auf diese Weise senden Sie Nachrichten nur an diesen Raum und nur an (verbundene) Online-Benutzer (weniger Pakete, die über den Server gesendet werden).
quelle
Lassen Sie es mich mit socket.io-Räumen einfacher machen. Fordern Sie einen Server mit einer eindeutigen Kennung an, einem Server beizutreten. Hier verwenden wir eine E-Mail als eindeutige Kennung.
Client Socket.io
Wenn der Benutzer einem Server beigetreten ist, erstellen Sie einen Raum für diesen Benutzer
Server Socket.io
Jetzt sind wir alle bereit, uns anzuschließen. Lassen Sie etwas vom Server ausgeben
to
, damit der Benutzer zuhören kann.Server Socket.io
Lassen Sie das Thema mit dem Abhören des
message
Ereignisses auf der Clientseite abschließenDie Referenz von Socket.io Zimmern
quelle