Ich experimentiere mit dem Erstellen einer websocket-basierten Anwendung.
Ich frage mich, ob es möglich ist, eine Nachricht an alle aktiven Verbindungen zu senden, da sie persistent sind.
Sagen wir, ich betreibe eine Live-Auktions-Site und ich habe mehrere Nutzer, die sich die Auktionsseite ansehen, jeder von ihnen ist über Sockets mit meinem Server verbunden. Nehmen wir an, ein Nutzer erhöht das Gebot. Ich möchte eine Nachricht an alle verbundenen Clients senden. Der einfachste Weg ist, dass die Clients den Server jede Sekunde per Socket abfragen, aber ich denke, die Idee von Websockets ist eine echte bidirektionale Kommunikation.
Wie kann das gemacht werden?
Danke im Voraus,
Rotem
socket.io Lösung:
%Vor%webocket-Server (es gibt viele ), mache dasselbe manuell:
%Vor%Für eine auf Tornado / Tornadio basierende Lösung muss die SocketConnection-Klasse eine Liste von Verbindungen auf Klassenebene verwalten. Ihr on_connect-Handler würde die Verbindung zu dieser Liste hinzufügen, und on_close würde sie entfernen. Für Beispiel-Pseudo-Code siehe diesen Beitrag von Serge S. Koval. Der Code wird unten reproduziert:
Deklarieren Sie Ihre TornadIO-Verbindungsklasse:
%Vor%Gehen Sie in Ihrem Geräteabfrage-Thread wie folgt vor:
%Vor%Außerdem unterstützt gevent-socketio die Nachrichtenübertragung, basiert aber auf gevent und nicht auf tornado.
>tornadio2 verwaltet bereits eine Liste aktiver Sitzungen. Sie müssen also nur Folgendes tun:
%Vor% Dies funktioniert, weil jede Verbindungsinstanz einen Verweis auf ihre Sitzung hat, die einen Verweis auf den globalen Router enthält, der zum Erstellen der Anwendung verwendet wurde (gespeichert als server
), der eine Liste von Sitzungen in einem SessionContainer
-Objekt verwaltet %Code%. Wenn Sie jetzt eine Nachricht innerhalb Ihrer Verbindungsklasse senden möchten, tun Sie Folgendes:
Dieses Beispiel redis + websockets (auf Tornado) sollte Ihnen helfen. Im Grunde haben Sie eine Liste von Zuhörern, die benachrichtigt werden sollten und sobald eine Nachricht empfangen wird, durchlaufen Sie diese Liste und informieren Sie sie.