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:
- :
Der Ausführungsablauf einer Verbindung dann so etwas wie dieses würde Erste Handshake
- -Client macht eine
HTTP
Anfrage anServer
zusammen mit JS eine Websocket Verbindung anzufordern Server
antwortet,Header
enthält dieUpgrade
Richtlinie und schaltet Protokolle für diesen Client- Websocket Server stellt eine
Websocket
Verbindung mit Client
- -Client macht eine
- Kunde ein
POST
/PUT
/etc einreicht.Webserver
(Apache/Nginx) holt von AbfrageergebnisWebserver
sendet Ergebnis an dieMQ
, wo es zu der Warteschlange hinzugefügt wirdMessage
zuWebsocket
Server gesendet wird, vonMQ
Message
wird zurückgeschickt der Kunde
Ist t sein Ansatz richtig? Fehle ich etwas? Verstehe ich etwas falsch?
Symfony2 ist nicht die beste Idee, die ich denke, jedenfalls verstehe ich, dass Sie WebSocket-Verbindung in Symfony-Controller erstellen möchten, richtig? – Griva
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 ... –
@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