Bagaimana GMail mengimplementasikan Comet?

Dengan bantuan HttpWatch, saya mencoba mencari tahu bagaimana GMail mengimplementasikan Comet.

Saya login ke GMail dengan dua akun, satu di IE dan satu lagi di Firefox. Ngobrol di GTalk di GMail dengan beberapa kata ajaib seperti "WASSUP". Lalu, saya logout kedua akun GMail, memfilter konten http apa pun tanpa string "WASSUP". Hasilnya menunjukkan permintaan HTTP mana yang merupakan saluran streaming. (Catatan: Saya harus keluar. Jika tidak, HTTP yang tidak pernah berakhir tidak akan menampilkan konten di HttpWatch.)

Hasilnya menarik. URL untuk saluran streaming seperti:

https://mail/channel/bind?VER=8&at=xn3j33vcvk39lkfq.... .

Tidak mengherankan jika GMail melakukan Comet di IE dengan IFRAME. Konten Http dimulai dengan "<html><body>".

Awalnya, saya menduga GMail melakukan Comet di Firefox dengan XmlHttpRequest multi-bagian. Yang mengejutkan saya, header respons tidak memiliki header "multipart/x-mixed-replace". Header responsnya adalah sebagai berikut:

HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Date: Sat, 20 Mar 2010 01:52:39 GMT
X-Frame-Options: ALLOWALL
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
Server: GSE
X-XSS-Protection: 0

Sayangnya, HttpWatch tidak mengetahui apakah permintaan HTTP berasal dari XmlHttpRequest atau tidak. Kontennya bukan HTML tetapi JSON. Sepertinya respons untuk XHR, tetapi itu tidak akan berfungsi untuk Comet tanpa multipart/x-mixed-replace, bukan?

Apakah ada cara lain untuk mengetahui bagaimana GMail mengimplementasikan Comet?

Pembaruan: Setelah penyelidikan lebih lanjut, saya yakin GMail mengimplementasikan Comet dengan cara ini: 1) di IE, ia menggunakan iframe yang disembunyikan selamanya; 2) di Firefox, menggunakan forever-XHR tanpa header multipart/x-mixed-replace. Klien akan merespons dalam kondisi (readyState == 3) ATAU (readyState == 4). Artinya, dalam keadaan interaktif dan keadaan lengkap.


person Morgan Cheng    schedule 20.03.2010    source sumber


Jawaban (1)


Berdasarkan artikel ini,

Lalu apa solusi yang digunakan oleh Google Gmail?

Solusinya sangat sederhana, mudah dan sangat portabel! Apa yang dilakukan Gmail adalah meminta halaman html tanpa akhir yang berisi aliran bagian Javascript. Cobalah, ini sangat ampuh. Jadi, di sisi klien kita akan memiliki file js yang memproses respons, dan html tak berujung lainnya yang berisi Aliran Javascript.

Artikel selanjutnya membahas lebih detail, termasuk eksplorasi alternatif serta alternatif spesifik yang dipilih oleh GMail.

person Alex Martelli    schedule 20.03.2010
comment
Ini adalah artikel yang bagus. Namun masih belum menjelaskan mengapa GMail memilih JSON sebagai respon di Firefox. - person Morgan Cheng; 20.03.2010
comment
@Morgan, JSON memang cara yang bagus untuk mengemas data, terutama meskipun tidak secara eksklusif untuk penggunaan Javascript -- cfr ajaxian.com/archives/json-vs-xml-the-debate dan (khususnya) banyak tautan darinya. Dengan pengkodean transfer yang terpotong, ini berfungsi dengan baik... setidaknya di browser yang memenuhi standar;-). - person Alex Martelli; 20.03.2010
comment
Hai, mencoba waybackmachine untuk artikel tersebut karena artikelnya tidak aktif. Bisakah Anda mengirimkan tautan lain? Terima kasih!! - person loveNoHate; 14.12.2014
comment
Tidak yakin apa yang Anda maksud dengan artikel tersebut tidak ada -- baru saja mengunjungi ajaxian.com/ archives/json-vs-xml-the-debate dan itu ada di sana. - person Alex Martelli; 16.12.2014
comment
Saya pikir @DOCASAREL mengacu pada tautan di Jawaban. - person tshepang; 18.04.2015