Perché il mio socket.io utilizza il polling lungo anziché il websocket?

Così ho installato socket.io con un server NodeJS + ExpressJS e tutto funziona bene. L’unico problema è che ho appena realizzato che le mie chiamate emit() stanno utilizzando il metodo fallback XHR per inviare l’evento al mio server invece della connessione websocket che ha aperto.

Quando visualizzo la connessione, tutto quello che vedo sono alcuni 2probe , 3probe , seguiti da un gruppo di 2 e 3 inviati attraverso la websocket. Questa connessione sembra essere aperta e funzionante, quindi perché sta ricadendo su un lungo polling con le richieste XHR?

Non sto fornendo alcun codice in questo momento perché non sono sicuro di quale parte sarebbe rilevante dal momento che l’aspetto funzionale del codice funziona in modo ottimale, voglio solo utilizzare il websocket su XHR. Fammi sapere se c’è qualche codice che vorresti vedere

AGGIORNARE

Quindi stavo testando le prese un po ‘di più e ho aggiunto un paio di altre chiamate emit() . Sembra che le prime 1 o 2 emittenti utilizzino il polling lungo e poi all’improvviso cambierà con l’uso della websocket. Solo curioso di sapere cosa sta succedendo qui.

Da Socket.IO 1.x, l’algoritmo di fallback è cambiato da un approccio downgrade a un approccio di upgrade.

Il polling lungo praticamente funziona dappertutto, quindi viene utilizzato inizialmente in modo da poter ottenere una “connessione” immediatamente. Quindi, in background, viene effettuato un tentativo di aggiornare la lunga connessione di polling a una connessione websocket. Se l’aggiornamento ha esito positivo, il polling lungo si arresta e la sessione passa alla connessione websocket. Se non ha esito positivo, la “connessione” polling lunga rimane aperta e continua a essere utilizzata.