GMail ใช้งาน Comet อย่างไร

ด้วยความช่วยเหลือของ HttpWatch ฉันพยายามคิดว่า GMail ใช้งาน Comet อย่างไร

ฉันเข้าสู่ระบบ GMail ด้วยสองบัญชี บัญชีหนึ่งใน IE และอีกบัญชีใน Firefox แชทใน GTalk ใน GMail ด้วยคำวิเศษเช่น "WASSUP" จากนั้น ฉันออกจากระบบบัญชี GMail ทั้งสองบัญชี กรองเนื้อหา http ใดๆ โดยไม่มีสตริง "WASSUP" ผลลัพธ์แสดงว่าคำขอ HTTP ใดเป็นช่องทางการสตรีม (หมายเหตุ: ฉันต้องออกจากระบบ ไม่เช่นนั้น HTTP ที่ไม่มีวันสิ้นสุดจะไม่แสดงเนื้อหาใน HttpWatch)

ผลลัพธ์ที่ได้ก็น่าสนใจ URL สำหรับช่องสตรีมมีลักษณะดังนี้:

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

ไม่น่าแปลกใจเลยที่ GMail ทำ Comet ใน IE ด้วย IFRAME เนื้อหา Http ขึ้นต้นด้วย "<html><body>"

เดิมทีฉันเดาว่า GMail ทำ Comet ใน Firefox ด้วย XmlHttpRequest หลายส่วน ฉันประหลาดใจที่ส่วนหัวการตอบกลับไม่มีส่วนหัว "multipart/x-mixed-replace" ส่วนหัวของคำตอบมีดังนี้:

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

น่าเสียดายที่ HttpWatch ไม่ได้บอกว่าคำขอ HTTP มาจาก XmlHttpRequest หรือไม่ เนื้อหาไม่ใช่ HTML แต่เป็น JSON ดูเหมือนว่าจะเป็นการตอบสนองต่อ XHR แต่นั่นจะไม่ทำงานสำหรับ Comet หากไม่มี multipart/x-mixed-replace ใช่ไหม

มีวิธีอื่นใดที่จะทราบว่า GMail นำ Comet ไปใช้อย่างไร

อัปเดต: หลังจากการตรวจสอบเพิ่มเติม ฉันเชื่อว่า GMail ใช้ Comet ในลักษณะนี้: 1) ใน IE จะใช้ iframe ที่ซ่อนอยู่ตลอดไป; 2) ใน Firefox จะใช้ตลอดไป-XHR โดยไม่มีส่วนหัว multipart/x-mixed-replace ลูกค้าจะตอบสนองตามเงื่อนไข (readyState == 3) หรือ (readyState == 4) นั่นคือทั้งในสถานะโต้ตอบและสถานะสมบูรณ์


person Morgan Cheng    schedule 20.03.2010    source แหล่งที่มา


คำตอบ (1)


ตามบทความนี้

แล้ว Google Gmail ใช้วิธีแก้ปัญหาอะไร?

วิธีแก้ปัญหานั้นง่ายมาก ตรงไปตรงมา และพกพาสะดวกมาก! สิ่งที่ Gmail ทำคือการขอหน้า html ที่ไม่มีที่สิ้นสุดซึ่งมีสตรีมของส่วน Javascript ลองดูครับ มันแรงมาก ดังนั้น เราจะมีไฟล์ js ในฝั่งไคลเอ็นต์ที่ประมวลผลการตอบกลับ และอีก html ที่ไม่มีที่สิ้นสุดซึ่งมี Javascript Streams

ส่วนที่เหลือของบทความมีรายละเอียดมากขึ้น รวมถึงการสำรวจทางเลือกอื่นๆ รวมถึงตัวเลือกเฉพาะที่เลือกโดย GMail

person Alex Martelli    schedule 20.03.2010
comment
เป็นบทความที่ดี แต่ก็ยังไม่ได้อธิบายว่าทำไม GMail เลือก JSON เป็นการตอบกลับใน Firefox - person Morgan Cheng; 20.03.2010
comment
@Morgan, JSON เป็นวิธีที่ดีในการจัดทำแพ็คเกจข้อมูลโดยเฉพาะอย่างยิ่งแม้ว่าจะไม่ใช่เฉพาะสำหรับการใช้งานของ Javascript -- cfr ajaxian.com/archives/json-vs-xml-the-debate และ (โดยเฉพาะ) ลิงก์มากมายจากที่นั่น ด้วยการเข้ารหัสการถ่ายโอนแบบ chunked มันทำงานได้ดี ... อย่างน้อยก็ในเบราว์เซอร์ที่ได้มาตรฐาน ;-) - person Alex Martelli; 20.03.2010
comment
สวัสดี ลองใช้ waybackmachine สำหรับบทความแล้วเนื่องจากบทความไม่สามารถใช้งานได้ คุณสามารถส่งลิงค์อื่นได้หรือไม่? ขอบคุณ!! - person loveNoHate; 14.12.2014
comment
ไม่แน่ใจว่าคุณหมายถึงอะไรในบทความนี้ ใช้งานไม่ได้ -- เพิ่งไปที่ ajaxian.com/ archives/json-vs-xml-the-debate และอยู่ตรงนั้น - person Alex Martelli; 16.12.2014
comment
ฉันคิดว่า @DOCASAREL อ้างถึงลิงก์ในคำตอบ - person tshepang; 18.04.2015