2012-01-06 6 views
5

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

7

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.