Wie bindet man den ZeroMQ-Socket mit der Ratchet-Web-Socket-Bibliothek, um eine Echtzeit-Anwendung für die PHP-Anwendung zu erstellen?

8

Ich bin nur ein Anfänger in diesem ganzen Bereich mit Websocket, Ratchet und ZeroMQ.

Zu meinem grundlegenden Verständnis:

websocket hilft dabei, eine offene Verbindung zwischen Server und Client herzustellen.

Ratchet ist eine PHP-basierte Bibliothek, die die Socket-Funktionen von PHP verwendet, um ein PHP-Socket-Framework zu erstellen, das es uns ermöglicht, PHP-Socket-Programmierung zu vereinfachen.

ZeroMQ ist eine Socket-Bibliothek, die nicht-ratchet-Anwendung (andere PHP-Skript) die Daten über Ratchet-Socket und Web-Socket senden.

Ich folge dem Tutorial in Ratchet über 'Hallo Welt' und 'Pusher', aber beide scheinen unvollständig zu sein und lehren nur, wie man nur mit der Konsole arbeitet. Ich habe auch ein Ratschen-Beispiel in Github gefunden, aber es ist nicht richtig dokumentiert. Ich war auf der Suche nach einem vollständigen Beispiel (mit einer dedizierten HTML-Seite und Javascript)

Unten ist der Code, an dem ich arbeite: Dies ist eine der Methoden des Controllers, für den ich eine Ajax-Anfrage mache. Diese Methode erstellt einen neuen Post (sagen wir mal). Ich möchte die Liste der Post dynamisch im Browser des multiplen Clients aktualisieren, indem ich mit Hilfe von ZeroMq sende und drücke.

Eine Methode in einem Controller:

%Vor%

Pusher-Datei:

%Vor%

Shell Script zum Ausführen des Servers:

%Vor%

Shell Skript sagt nur, dass es in Port 8080 dienen wird, aber wie würde ich meine Routen erwähnen. Sagen wir, ich möchte die offene Verbindung nur in der Seite 'mysite / allposts'. Außerdem, was wäre das Skript, das ich auf der Client-Seite (eine Javascript-Datei) schreiben muss und wie man diese neuen Daten durch Client-Seite erhält, die ein bestimmtes DOM-Objekt aktualisiert.

    
Nirmalz Thapaz 12.07.2015, 10:37
quelle

1 Antwort

3

Ich folgte den Beispielen, über die Sie sprechen. Sie schienen mir nicht unvollständig zu sein, aber ich verstehe, was du meinst. Ratchet ist ein serverseitiges Skript und ermöglicht Ihnen nur das Schreiben eines Dienstes, der Websockets implementiert und ZMQ-Nachrichten abhören kann. Sie werden Ihr Ratchet-Skript in der Befehlszeile starten und es wird als Dienst parallel zu Apache ausgeführt.

Dies ist alles unabhängig von der Clientseite des Websockets. Wie sie empfehlen, habe ich Autobahn.js auf der Clientseite verwendet. Diese Bibliothek implementiert das WAMP-Protokoll. Es vereinfacht den clientseitigen Code auf das Maximum.

Das Problem mit Ihrem Code ist, dass class Pusher implements WampServerInterface kein public function onPostEntry hat. Diese Klasse muss WampServerInterface implementieren, dh sie muss mindestens folgende Funktionen haben:

  • onSubscribe (ConnectionInterface $ conn, $ topic)
  • onUnSubscribe (ConnectionInterface $ conn, $ topic)
  • onOpen (Verbindungsschnittstelle $ conn)
  • onClose (ConnectionInterface $ conn)
  • onPublish (ConnectionInterface $ conn, $ topic, $ ereignis, array $ exclude, array $ berechtigt
  • onError (ConnectionInterface $ conn, \ Exception $ e)
  • onZMQMessage ($ jsondata)

Es kann andere für erweiterte Funktionen geben, z. B. call remote Prozeduren auf Clients.

Geben Sie auf der Senderseite (ZMQ-Nachricht) folgenden Code ein:

%Vor%

In der Pusher-Datei etwas wie:

%Vor%

Das letzte Stück ist auf dem Client. Wenn ein Benutzer die Seite mysite/allposts öffnet, fügen Sie in Javascript autobahn.js ein. Der Websocket wird unter der Variable ab zur Verfügung gestellt. Sie tun dann:

Beim Öffnen der Seite:

%Vor%

Beim Schließen der Seite:

%Vor%

Sie merken, dass ich alles sehr allgemein gehalten habe. Dies ermöglicht es mir, mehrere Arten von Nachrichten von demselben System zu behandeln. Was sich unterscheidet, sind die ZMQ-Nachrichten und die Argumente von currentSession.subscribe .

Ich meine Implementierung, ich verfolge auch die angemeldeten Benutzer, die die Verbindung geöffnet haben, aber ich habe diesen Teil des Codes entfernt.

Ich hoffe, dass dir das weiterhilft.

    
Lorenz Meyer 12.07.2015, 10:53
quelle

Tags und Links