Vorrei inviare i dati agli utenti ogni 2 minuti. L'uso di EventSource richiede un ulteriore push byte null ogni 29 secondi per mantenere aperta la connessione. WebSocket non richiede tale ping. Perché la connessione EventSource viene regolarmente chiusa e riaperta? È perché non esiste un buon modo integrato in HTTP per verificare se la connessione è ancora aperta o per altri motivi?Perché la connessione EventSource viene chiusa ogni 30-60 secondi quando nessun dato viene trasportato, mentre quello di WebSocket viene tenuto aperto?
risposta
L'API Server-Sent Events (Eventsource) è strutturata su HTTP. WebSocket è stratificato su TCP (ma ha un handshake HTTP compatibile). Sia HTTP che TCP hanno spesso timeout inattivi, tuttavia i timeout TCP tendono ad essere molto più lunghi (ad esempio 2 ore anziché 2 minuti). Quindi potresti ancora aver bisogno di messaggi keep-alive in WebSockets, ma probabilmente potrebbero essere molto meno frequenti. Inoltre, lo WebSocket standard definisce i frame ping/pong che il browser/server può implementare per fare questo per te.
può dipendere dal vostro software lato server
node.js ha 2 minuti di timeout predefinito
ecco articolo su di esso - http://contourline.wordpress.com/2011/03/30/preventing-server-timeout-in-node-js/
soluzione:
res.connection.setTimeout(0); // this could take a while