Senden einer Nachricht an einen Client über seine socket.id

8

Ich kann nur scheinbar Nachrichten an Benutzer ausgeben, wenn ihre Socket-ID direkt in der Funktion io.sockets.on ('connect') gespeichert wurde. Ich weiß nicht, warum es nicht funktioniert, wenn Sie versuchen, ihre Socket-ID zu speichern, nachdem sie sich angemeldet haben.

Arbeiten:

%Vor%

Funktioniert nicht:

%Vor%

JavaScript Client-seitiges Code-Snippet

%Vor%

Lösung: Danke @alessioalex Ich musste den Verweis auf socket.io von der Anmeldeseite entfernen und folgendes in io.sockets.on ('connection')

hinzufügen %Vor%     
Jack 11.12.2011, 21:50
quelle

2 Antworten

25

Es gibt einige Probleme mit Ihrem Code, der erste ist, dass Sie Benutzer nicht über Socket.IO authentifizieren sollten. Sie sollten sicherstellen, dass sie sich erst nach der Authentifizierung verbinden können. Wenn Sie Express verwenden, kann der folgende Artikel Ihnen sehr helfen: Ссылка

Sie sollten auch vermeiden, Nachrichten wie diese zu senden, da dies intern ein Teil von Socket.IO ist und sich ändern kann:

%Vor%

Stattdessen (wenn Sie eine Nachricht an einen bestimmten Client senden möchten), ist es besser, ein Objekt zum Beispiel mit den verbundenen Clients zu behalten (und den einmal getrennten Client zu entfernen):

%Vor%

Sicher, io.sockets.socket(id) funktioniert vielleicht (nicht wirklich testen), aber es kann auch immer geändert werden, da es Teil der Socket.IO Interna ist, also ist meine obige Lösung "sicherer".

Eine andere Sache, die Sie vielleicht in Ihrem Code auf der Client-Seite ändern möchten, ist var socket = io.connect(''); mit var socket = io.connect('http://localhost'); , wie wir im offiziellen Beispiel von Socket.IO sehen können: Ссылка

    
alessioalex 11.12.2011, 23:13
quelle
2

Ich kann sehen, dass dieser Beitrag ziemlich viel Interesse erzeugt ... also werde ich den Code posten, den ich verwendet habe, um dies zu implementieren:

Notizen

Ich habe Redis als Sitzungsspeicher verwendet. Die Sitzung wird anfänglich während der Anmeldeseite über eine HTTP-Anfrage mit den Benutzerdetails eingerichtet, wenn diese Details gültig sind (gegen ein MongoDB-Dokument geprüft) ... dann wird die Sitzung erstellt.

Server Side Code Erstellung und Entfernung von Session / Socket

%Vor%

Serverseitige selektive Nachrichtenübertragung

Mit diesem Code kann ich eine Nachricht an Teammitglieder eines Projekts senden. Ein Team von Benutzern erhält keine Nachrichten von einem separaten Team von Benutzern.

%Vor%     
Jack 04.05.2012 19:24
quelle

Tags und Links