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:
il flusso di esecuzione di un collegamento, allora sarebbe qualcosa di simile:
- stretta di mano iniziale
- client effettua una richiesta di
HTTP
Server
con JS per richiedere una connessione websocket Server
risponde,Header
contiene la direttivaUpgrade
e switch di protocolli per quel cliente- websocket Server stabilisce una connessione con il client
Websocket
- client effettua una richiesta di
- client invia un
POST
/PUT
/etc.Webserver
(Apache/Nginx) recupera risultato da QueryWebserver
invia risultato alMQ
dove viene aggiunto alla codaMessage
viene inviato alWebsocket
server daMQ
Message
viene rinviato il cliente
è t il suo approccio è corretto? Mi sto perdendo qualcosa? Sto comprendendo qualcosa in modo errato?
Symfony2 non è l'idea migliore, penso, comunque capisco che vuoi creare una connessione Websocket all'interno del controller di symfony, corretto? – Griva
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 ... –
@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