2016-06-03 29 views
10

Mamy aplikację internetową, która obecnie używa pollingu do obsługi ciągłych aktualizacji.Websockets z PHP i Symfony - architektura sieci i serwera

Podczas przechodzenia na długi głosowanie może być niewielkim bandaidem do wydania, chcieliśmy wdrożyć rozwiązanie Websockets, które będzie trwałe i skalowalne.

Moje pytanie brzmi: jaki rodzaj architektury będzie potrzebny dla tego?

Zrobiłem rozeznanie się i odkryli, że typowa konfiguracja dla aplikacji Enterprise jest coś takiego: websocket flow

Przepływ wykonanie połączenia wtedy byłoby coś takiego:

  1. Początkowa handshake
    • Klient dokonuje HTTP Prośba do Server wraz z JS do żądania połączenia websocket
    • Server odpowiada, Header zawiera dyrektywę Upgrade i przełącza protokołów dla tego klienta
    • websocket Server ustanawia Websocket połączenie z klientem
  2. Klient złoży POST/PUT/etc.
    • Webserver (apache/Nginx) pobiera wynikiem zapytania
    • Webserver przesyła wynik do MQ gdzie jest dodawany do kolejki
    • Message jest przesyłany do serwera Websocket z MQ
    • Message jest odsyłany do klient

T jego podejście jest poprawne? Czy brakuje mi czegoś? Czy rozumiem coś niepoprawnie?

+0

Symfony2 nie jest najlepszym pomysłem myślę, w każdym razie rozumiem, że chcesz utworzyć połączenie Websocket wewnątrz kontrolera symfony, prawda? – Griva

+0

Dlaczego potrzebujesz MessageQueue między nginx i nodejs? Nodejs znakomicie radzi sobie z wieloma prośbami ... Nie ma również potrzeby HAPROXY, ponieważ nginx może sam poradzić sobie z uaktualnieniem protokołu. Czy chcesz to tak skomplikować? Miałem podobne rozwiązanie z prawie identyczną konfiguracją i bardzo trudno było go utrzymać.Należy pamiętać, że przez większość czasu potrzebny jest mechanizm przekazywania danych sesji z nginx (PHP) do nodejs ... –

+0

@MitjaGustin Kolejka wiadomości byłaby większą częścią aplikacji i służyła nie tylko do websockets. W tym sensie szukam rozwiązania websocket, które będzie działać z kolejką wiadomości. Z drugiej strony, HAProxy nie jest trudnym wymogiem - może zostać zastąpiony innym rodzajem Load Balancera i nie ma znaczenia. Po prostu próbowałem w takim przypadku zrozumieć architekturę. – user991710

Odpowiedz

2

Spróbuj zaglądając na to: socketo.me

Kinda daje wyobrażenie. Z tego, co widzę, jest to dość podobne do tego, co sobie wyobraziłeś na diagramie architektury, który opublikowałeś.

Warto również przyjrzeć się temu Stackoverflow question's answer.

0

Czy próbowałeś już GOS WebSocketBundle? Użyłem go na stronie produkcyjnej do obsługi czatu, a wraz z nim stunnel działa bezbłędnie przez SSL.