2010-04-18 14 views
17

Sto cercando di capire in che modo la funzione di chat di Facebook riceve i messaggi senza spostare continuamente il server.In che modo chat di Facebook evita il polling continuo del server?

Firebug mi mostra un singolo GET XmlHttpRequest continuamente seduto lì, in attesa di una risposta dal server. Dopo 5 minuti, questo non è mai scaduto.

Come impediscono il timeout?

Una richiesta AJAX può semplicemente sedersi così indefinitamente in attesa di una risposta?

Posso farlo con JSONRequest? Lo vedo su json.org:

JSONRequest è progettato per supportare connessioni duplex . Ciò consente le applicazioni in cui il server può avviare in modo asincrono le trasmissioni. Questa operazione viene eseguita utilizzando due richieste simultanee di : una da inviare e l'altra a riceve. Utilizzando il parametro timeout , è possibile lasciare una richiesta POST in attesa fino a quando il server non determina di disporre di dati tempestivi da inviare.

Oppure c'è un altro modo per consentire a una chiamata AJAX di sedersi lì, in attesa, oltre all'utilizzo di JSONRequest?

risposta

25

Facebook utilizza una tecnica che viene ora chiamata Comet per inviare messaggi dal server al client invece di fare in modo che il client esegua il polling del server.

Ci sono molti modi in cui questo può essere implementato, con XMLHttpRequest long polling essendo solo un'opzione. Il principio alla base di questo metodo è che il client invia un ordinario XMLHttpRequest ma il server non risponde finché non si verifica qualche evento (come un altro utente che invia un messaggio), quindi il client è costretto ad attendere. Quando il client riceve una risposta (o se la richiesta scade) il client crea semplicemente una nuova richiesta in modo che abbia sempre una richiesta aperta al server.

+0

Ho appena immaginato che, se creo una lunga connessione di polling, il mio Mac/computer non si addormenta. Come è fatto su chat di Gmail e Facebook? O impediscono anche a dormire? (Confuso.) – loveNoHate

Problemi correlati