2016-06-03 11 views
10

Wir haben eine Webanwendung, die derzeit Abfragen verwendet, um fortlaufende Aktualisierungen zu verarbeiten.Websockets mit PHP und Symfony - Netzwerk- und Serverarchitektur

Während der Wechsel zu Long-Polling möglicherweise ein kleines Problem für das Problem ist, wollten wir eine WebSockets-Lösung implementieren, die dauerhaft und skalierbar ist.

Meine Frage ist: welche Art von Architektur wird für diese benötigt werden?

ich einige der Forschung selbst getan haben, und haben festgestellt, dass die typische Einstellung für eine Enterprise-Anwendung so etwas wie dieses:

  1. : websocket flow

    Der Ausführungsablauf einer Verbindung dann so etwas wie dieses würde Erste Handshake

    • -Client macht eine HTTP Anfrage an Server zusammen mit JS eine Websocket Verbindung anzufordern
    • Server antwortet, Header enthält die Upgrade Richtlinie und schaltet Protokolle für diesen Client
    • Websocket Server stellt eine Websocket Verbindung mit Client
  2. Kunde ein POST/PUT/etc einreicht.
    • Webserver (Apache/Nginx) holt von Abfrageergebnis
    • Webserver sendet Ergebnis an die MQ, wo es zu der Warteschlange hinzugefügt wird
    • Message zu Websocket Server gesendet wird, von MQ
    • Message wird zurückgeschickt der Kunde

Ist t sein Ansatz richtig? Fehle ich etwas? Verstehe ich etwas falsch?

+0

Symfony2 ist nicht die beste Idee, die ich denke, jedenfalls verstehe ich, dass Sie WebSocket-Verbindung in Symfony-Controller erstellen möchten, richtig? – Griva

+0

Warum brauchen Sie MessageQueue zwischen nginx und nodejs? Nodejs eignet sich hervorragend für die Verarbeitung mehrerer Anfragen ... Außerdem ist HAPROXY nicht erforderlich, da nginx die Protokollaktualisierung selbst durchführen kann. Willst du es so kompliziert haben? Ich hatte eine ähnliche Lösung mit fast identischem Aufbau und es war sehr schwierig, sie aufrechtzuerhalten.Denken Sie daran, dass Sie in den meisten Fällen einen Mechanismus benötigen, um Sitzungsdaten von nginx (PHP) an nodejs zu übergeben ... –

+0

@MitjaGustin Die Nachrichtenwarteschlange wäre ein größerer Teil der Anwendung und würde für mehr als nur die Websockets verwendet. In diesem Sinne suche ich nach einer Websocket-Lösung, die mit einer Message Queue funktioniert. HAProxy hingegen ist keine schwierige Anforderung - es kann durch eine andere Art von Load Balancer ersetzt werden und ist inkonsequent. Ich habe lediglich versucht, in einem solchen Fall eine grobe Vorstellung von der Architektur zu bekommen. – user991710

Antwort

2

Versuchen Sie, einen Blick auf diese haben: gibt Ihnen socketo.me

Kinda eine Idee. Von dem, was ich sehen kann, ist das ziemlich ähnlich zu dem, was Sie in dem Architekturdiagramm, das Sie gepostet haben, vorgestellt haben.

Kann auch einen Blick wert sein Stackoverflow question's answer.

0

Haben Sie versucht GOS WebSocketBundle? Ich habe es auf der Produktionsstätte verwendet, um mit Chat umzugehen und zusammen mit Stunnel funktioniert es einwandfrei über SSL.