Ist es möglich, eine Nachricht an alle aktiven WebSocket-verbindungen? Entweder node.js oder python-tornado websockets
Ich experimentiere mit dem Aufbau einer websocket-basiert Anwendung.
Frage ich mich, ob es möglich ist eine Nachricht zu senden, um alle aktiven verbindungen, wie Sie sind hartnäckig.
Sagen, ich bin mit einem live-Auktions-Website, und ich habe mehrere Benutzer beobachten die Auktions-Seite, jeder von Ihnen ist angeschlossen über sockets zu meinem server. Sagen wir nun, dass ein Benutzer hebt das Gebot. Ich möchte zum senden einer Nachricht an alle angeschlossenen clients. Einfachste Weg ist, um das Kunden-Umfrage über den server socket, jede Sekunde, aber ich finde die Idee von websockets ist eine echte bi-direktionale Kommunikation.
Wie kann das getan werden?
vielen Dank im Voraus,
Rotem
- Ich habe auch exakt diese Frage. Kann mir jemand sagen, wie kann ich dies in servlet mit tomcat-server. Habe ich einen WebSocketServlet diesem Beispiel. - gist.github.com/chitan/3063774
Du musst angemeldet sein, um einen Kommentar abzugeben.
socket.io Lösung:
webocket server (es gibt viele), tun dasselbe manuell:
Für eine Lösung basierend auf der tornado/tornadio, Sie SocketConnection Klasse muss weiterhin eine Liste der verbindungen in der Klasse. Ihre on_connect handler hinzufügen würde, die Verbindung zu dieser Liste, und on_close würde es zu entfernen. Zum Beispiel pseudo-code zu sehen dieser Beitrag von Serge S. Koval. Der code reproduzieren unter:
Erklären TornadIO connection-Klasse:
In Ihrem Gerät polling-thread, etwas zu tun:
Darüber hinaus gevent-socketio hat die Unterstützung für broadcast-Nachricht, aber es basiert auf gevent, nicht tornado.
UPDATE:
tornadio2 unterhält bereits eine Liste der aktiven Sitzungen, so dass alle Sie tun müssen, ist:
Dies funktioniert, da jede Verbindung eine Instanz hat eine Referenz auf die Sitzung, die eine Referenz auf die Globale router verwendet, um die Anwendung zu erstellen (gespeichert als
server
), die pflegt eine Liste der Sitzungen in einemSessionContainer
Objekt in_sessions
. Nun, wenn Sie wollen broadcast-eine Nachricht in Ihrem Zusammenhang-Klasse, nur:Diese redis + websockets (tornado) Beispiel sollte dir helfen. Im Grunde haben Sie eine Liste von Listenern, die benachrichtigt werden sollen und sobald eine Nachricht empfangen wird, beim Durchlaufen dieser Liste und informieren.