domanda in base a questa risposta: https://stackoverflow.com/a/18650183/4478897socket.io + Redis + expressjs grappolo - ottenere oggetto socket in expressjs richiedere
ho cercato di trovare questa soluzione, ma nulla sembra funzionare nel modo in cui ho bisogno.
Clustering expressjs
e socket.io
possiamo condividere le sessioni con Redis e inviare messaggi io
all'interno io
mondo (io.sockets.on('connection',
...). Il problema è se vogliamo inviare il messaggio (o utilizzare un semplice socket.join/leave
) all'interno del mondo expressjs
(route.get/post
).
Se non stiamo usando cluster possiamo Atach l'oggetto client socket
al request
oggetto espresso (o semplicemente export
l'oggetto io
) e quindi utilizzarlo in qualsiasi momento su qualsiasi rotta GET/POST.
Al contrario, se siamo di clustering e utilizzare il metodo citato per ottenere l'oggetto socket
all'interno del mondo expressjs
, a volte l'oggetto socket
è indefinito in quanto l'oggetto socket
per questo client viene inizializzato in altri worker
.
Qualche esempio di flusso:
- client si connette al http://localhost e
worker 1
gestisce questa richiesta. - Dopo aver caricato la pagina, il client si connette a
socket.io
.Worker 2
gestisce questa connessione. - Il client esegue un POST e di nuovo
worker 1
oworker X
gestisce questa richiesta.
In questo caso quando il client fare il POST, solo il worker 2
conosce l'oggetto socket
per questo client. Quindi questo otterrà un oggetto non definito socket
.
Quindi, la domanda:
Come possiamo ottenere l'oggetto client socket
da qualsiasi worker
di riutilizzare su expressjs request
oggetto.
Forse il mio codice è sbagliato ma è quasi come il link alla risposta di cui sopra.
note
- non si desidera utilizzare una sorta di proxy.
- non vogliono migrare verso altre biblioteche (expressio, sockjs ...)
- Ci dispiace per il mio inglese :)
Utilizzando ultimi nodejs, socket.io, expressjs, socket.io- redis, redis ... versioni
Non esitate a chiedere qualcosa!
UPDATE 1
Possibile soluzione, ma ancora bisogno di testarlo. Non so se questa è davvero una buona soluzione.
- UPDATE 3: codice di lavoro per conto mio risposta
UPDATE 2
come aggiornamento 1 ma utilizzando https://nodejs.org/dist/latest-v5.x/docs/api/cluster.html#cluster_event_message
ho visto l'unione. Grazie comunque: D – nada