2016-06-03 37 views
10

Abbiamo un'applicazione Web che attualmente utilizza il polling per gestire gli aggiornamenti continui.Web socket con PHP e Symfony - architettura di rete e server

Mentre passare al polling lungo può essere un piccolo ostacolo al problema, abbiamo voluto implementare una soluzione Websockets che sia durevole e scalabile.

La mia domanda è: che tipo di architettura sarà necessario per questo?

ho fatto qualche ricerca me stesso e ho trovato che la configurazione tipica per un'applicazione enterprise è qualcosa di simile: websocket flow

il flusso di esecuzione di un collegamento, allora sarebbe qualcosa di simile:

  1. stretta di mano iniziale
    • client effettua una richiesta di HTTPServer con JS per richiedere una connessione websocket
    • Server risponde, Header contiene la direttiva Upgrade e switch di protocolli per quel cliente
    • websocket Server stabilisce una connessione con il client Websocket
  2. client invia un POST/PUT/etc.
    • Webserver (Apache/Nginx) recupera risultato da Query
    • Webserver invia risultato al MQ dove viene aggiunto alla coda
    • Message viene inviato al Websocket server da MQ
    • Message viene rinviato il cliente

è t il suo approccio è corretto? Mi sto perdendo qualcosa? Sto comprendendo qualcosa in modo errato?

+0

Symfony2 non è l'idea migliore, penso, comunque capisco che vuoi creare una connessione Websocket all'interno del controller di symfony, corretto? – Griva

+0

Perché hai bisogno di MessageQueue tra nginx e nodejs? Nodejs si distingue per la gestione di richieste multiple ... Inoltre non è necessario HAPROXY, perché nginx può gestire da solo l'aggiornamento del protocollo. Vuoi averlo così complicato? Avevo una soluzione simile con un setup quasi identico ed era molto difficile mantenerlo.Tieni presente che per la maggior parte del tempo è necessario un meccanismo per passare i dati delle sessioni da nginx (PHP) a nodejs ... –

+0

@MitjaGustin La coda dei messaggi sarebbe una parte più ampia dell'applicazione e utilizzata per più di solo i websocket. In questo senso, sto cercando una soluzione websocket che funzioni con una coda di messaggi. HAProxy, d'altra parte, non è un requisito difficile: può essere sostituito da un altro tipo di Load Balancer ed è irrilevante. Stavo solo cercando di avere un'idea approssimativa dell'architettura in questo caso. – user991710

risposta

2

provare ad avere uno sguardo a questo: socketo.me

Kinda vi dà un'idea. Da quello che posso vedere, questo è abbastanza simile a quello che hai immaginato nel diagramma dell'architettura che hai pubblicato.

Potrebbe anche valere la pena guardare questo Stackoverflow question's answer.

0

Hai provato GOS WebSocketBundle? L'ho usato sul sito di produzione per gestire la chat e insieme a stunnel funziona perfettamente su SSL.