2010-03-20 37 views
14

Với sự trợ giúp của HttpWatch, tôi đã cố gắng tìm hiểu cách GMail triển khai Comet.GMail triển khai Comet như thế nào?

Tôi đăng nhập vào Gmail bằng hai tài khoản, một tài khoản trong IE và một trong Firefox. Trò chuyện trong GTalk trong Gmail với một số từ kỳ diệu như "WASSUP". Sau đó, tôi đăng xuất cả hai tài khoản Gmail, lọc bất kỳ nội dung http nào mà không có chuỗi "WASSUP". Kết quả cho thấy yêu cầu HTTP là kênh truyền trực tuyến. (Lưu ý: Tôi phải đăng xuất. Nếu không, HTTP không bao giờ kết thúc sẽ không hiển thị nội dung trong HttpWatch.)

Kết quả thật thú vị. URL cho kênh dòng giống như:

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

Không có gì ngạc nhiên khi GMail làm Comet trong IE với IFRAME. Nội dung Http bắt đầu bằng "<html><body>".

Ban đầu, tôi đoán rằng Gmail thực hiện Comet trong Firefox với nhiều XmlHttpRequest. Trước sự ngạc nhiên của tôi, tiêu đề phản hồi không có tiêu đề "multipart/x-mixed-replace". Các tiêu đề phản hồi như sau:

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 

Thật không may, HttpWatch không cho biết liệu yêu cầu HTTP có phải là từ XmlHttpRequest hay không. Nội dung không phải là HTML mà là JSON. Nó trông giống như một phản ứng cho XHR, nhưng điều đó sẽ không hoạt động cho Comet mà không có multipart/x-mixed-replace, phải không?

Có cách nào khác để tìm hiểu cách GMail triển khai Comet?

Cập nhật: Sau khi điều tra thêm, tôi tin rằng GMail thực hiện sao chổi theo cách này: 1) trong IE, nó sử dụng một mãi mãi-ẩn-iframe; 2) trong Firefox, nó sử dụng mãi mãi-XHR mà không có phần đầu thay thế nhiều phần/x-hỗn hợp. Máy khách sẽ phản hồi trong conditon (readyState == 3) OR (readyState == 4). Đó là, trong trạng thái tương tác và trạng thái hoàn chỉnh.

Trả lời

15

mỗi this article,

Vì vậy, các giải pháp được sử dụng bởi Google Gmail là gì?

Giải pháp thực sự đơn giản, thẳng về phía trước và rất di động! Gmail đã yêu cầu một trang html bất kỳ chứa luồng phần Javascript. Cung cấp cho thử thách , Rất mạnh mẽ. Vì vậy, chúng tôi sẽ có phía máy khách một tệp js xử lý các phản hồi và một html vô tận khác chứa các luồng Javascript .

Phần còn lại của bài viết đi vào chi tiết hơn, bao gồm cả việc khám phá các lựa chọn thay thế cũng như một lựa chọn cụ thể được chọn bởi Gmail.

+0

Đây là một bài viết hay. Tuy nhiên, nó vẫn không giải thích tại sao GMail chọn JSON làm phản hồi trong Firefox. –

+0

@Morgan, JSON là một cách hay để thực sự gói dữ liệu, đặc biệt là không dành riêng cho việc sử dụng Javascript - cfr http://ajaxian.com/archives/json-vs-xml-the-debate và (esp.) Nhiều liên kết từ đó. Với chunked chuyển mã hóa, nó hoạt động tốt ... ít nhất là trong các trình duyệt tương thích tiêu chuẩn ;-). –

+0

Xin chào, đã cố gắng cách sử dụng cho bài viết vì bài viết đã hết. Bạn có thể cung cấp liên kết khác không? Cảm ơn!! – loveNoHate

Các vấn đề liên quan