2010-04-17 29 views
10

Tôi muốn biết Gmail (hoặc bất kỳ ai khác) thực hiện sao chổi trên Opera.Gmail hoạt động như thế nào trên Opera?

Dưới đây là những gì tôi biết cho đến nay từ các thử nghiệm của mình.

  1. Thẻ không sử dụng thẻ event-source bị hỏng trong Opera 10.51.
  2. Nó không sử dụng khung nội tuyến hiển thị một con dao kéo sợi và con trỏ chuột bận.
  3. Nó không sử dụng responseText trên xmlhttprequest khi readyState = 3 được biết là bị hỏng trên Opera.

Tôi đã thử xem cách nó được thực hiện bằng mibbit và etherpad, và tôi thấy rằng cả hai đều sử dụng bỏ phiếu dài.

Bounty

Các tiền thưởng đi vào bất cứ ai có thể cho tôi một phương pháp tốt hơn so với "sự kiện nguồn" cho Opera sao chổi trực tuyến, hoặc làm thế nào gmail không truyền trực tuyến (hoặc dài bỏ phiếu nếu nó mà).

Trả lời

9

GMail sử dụng BrowserChannel (Docs | Source), được bao gồm trong Closure Library của Google.

  • @fileoverview Định nghĩa lớp BrowserChannel. Một BrowserChannel
  • mô phỏng một ổ cắm hai chiều qua HTTP. Đây là cơ sở của các kết nối
  • IM trò chuyện trong Gmail với máy chủ.
+0

tức là http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html Hãy suy nghĩ những gì bạn đang thực sự tìm kiếm ở đây: http://closure-library.googlecode.com/svn /docs/closure_goog_net_channelrequest.js.source.html tìm kiếm pollResponse_ và getNextChunk_ :) – hallvors

+0

Bạn có thể cụ thể hơn một chút không? Tôi cảm thấy rằng tôi đã đưa ra một tiền thưởng hào phóng đủ để đảm bảo một câu trả lời nhiều hơn chỉ là một liên kết đến một thư viện trừu tượng khổng lồ. – Unknown

+3

Vâng, tôi cảm thấy rằng nên được để lại cho Jason như ông đã cho con trỏ ban đầu để đóng cửa và tôi chỉ đi sâu hơn một chút .. Nhìn vào mã nguồn, có vẻ như sử dụng một async XMLHttpRequest thực sự, với một thời gian chờ đó là chịu trách nhiệm bỏ phiếu cho responseText và xử lý dữ liệu đến. Opera không kích hoạt nhiều sự kiện readystatechange trong khi dữ liệu chunked đang đến (Firefox chủ yếu là do một tai nạn hạnh phúc mà tôi nghĩ - không có tiêu chuẩn hoặc tài liệu nào bắt buộc thực hiện điều này theo như tôi biết). Vì vậy, thay vì mong đợi nhiều sự kiện readystatechange họ sử dụng timeouts. – hallvors

0

Tôi thực sự không có bất kỳ ý tưởng nào về câu trả lời. Nhưng tôi biết Opera hỗ trợ máy chủ-sự kiện: http://my.opera.com/WebApplications/blog/show.dml/438711. Có lẽ đó là một bước tiến tới anwser? Tôi cũng không chắc lắm, nhưng tôi nghĩ họ sử dụng nó trong Opera Unite.

+0

Không, nó không sử dụng nguồn sự kiện như tôi đã nói. Sự kiện-nguồn là hoàn toàn bị phá vỡ trong Opera 10,51, và gmail vẫn suối gchat tốt. – Unknown

0

Tôi nghĩ rằng phương pháp tiếp cận chéo (bao gồm Opera) có thể là truyền dữ liệu qua ứng dụng Adobe Flash. Mặc dù nó sẽ giới thiệu sự phụ thuộc vào các plugin Flash và không phải là rất phổ biến vì điều đó.

0

Tôi là tác giả của máy chủ HTTP C++ progess tương thích với goog.netBrowserChannel. Bạn có thể tìm thấy những tài liệu tôi đã viết trong khi nghiên cứu các giao thức ở đây:

http://code.google.com/p/libevent-browserchannel-server/wiki/BrowserChannelProtocol

câu chuyện dài ngắn, BrowserChannel sử dụng mãi mãi khung trên IE và XHR tuyến trên tất cả các trình duyệt khác. Giao thức được chia thành nhiều giai đoạn, lần đầu tiên là thử nghiệm mạng:

1) kiểm tra mạng để đảm bảo "phát trực tuyến" được hỗ trợ (nói cách khác không có proxy đệm)
2) kiểm tra quyền truy cập vào nhiều tiền tố mạng khác nhau (để đảm bảo quản trị viên mạng không chặn truy cập trò chuyện)

Sau đó, việc truyền dữ liệu thực tế có thể bắt đầu. Dữ liệu được chia thành hai kênh (tiến và lùi). Kênh quay lại là một chuỗi các yêu cầu dài (khoảng 4 phút mỗi lần) được sử dụng cho máy chủ để "truyền trực tuyến" nội dung cho khách hàng. Để làm như vậy HTTP chunked mã hóa được sử dụng.Khách hàng làm tốt nhất để đảm bảo rằng một kênh sau luôn mở. Máy chủ sẽ đóng nó khoảng 4 phút sau đó khách hàng sẽ mở một backchannel mới. Kênh chuyển tiếp được sử dụng để gửi dữ liệu từ máy khách đến máy chủ. Việc đẩy dữ liệu này được thực hiện khi cần thiết.

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