2010-04-17 64 views
10

我想知道Gmail(或任何其他人)如何在Opera上實現彗星。Gmail如何在Opera上做彗星?

這是我迄今從我的實驗中知道的。

  1. 它不使用在Opera 10.51中損壞的event-source標籤。
  2. 它不使用顯示旋轉跳動和忙碌鼠標光標的iframe。
  3. 當readyState = 3時,它不會在xmlhttprequest上使用responseText,這已知會在Opera上損壞。

我試着看它是如何在mibbit和etherpad中完成的,我發現它們都使用長輪詢。

賞金

賞金去誰可以告訴我的方法不是「事件源」爲歌劇Comet流,或如何Gmail也流(或者,如果長輪詢它確實是)更好。

回答

9

GMail使用BrowserChannel(Docs | Source),它包含在Google的Closure Library中。

  • @fileoverview BrowserChannel類的定義。 BrowserChannel
  • 模擬HTTP上的雙向套接字。它是
  • Gmail Chat IM連接到服務器的基礎。
+0

即http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html 覺得你實際上是在尋找什麼在這裏: http://closure-library.googlecode.com/svn /docs/closure_goog_net_channelrequest.js.source.html 搜索pollResponse_和getNextChunk_ :) – hallvors 2010-04-19 13:40:58

+0

你能成爲一個更具體一點?我覺得我已經給予了足夠的慷慨獎勵,而不僅僅是一個巨型抽象圖書館的鏈接。 – Unknown 2010-04-19 22:26:51

+3

嗯,我覺得這應該留給傑森,因爲他給了Closure原始指針,我只是深入一點。看看這個源代碼,它似乎使用了一個異步的XMLHttpRequest,確實有一個超時負責輪詢responseText並處理傳入的數據。當chunked數據進入時,Opera並沒有觸發幾個readystatechange事件(我認爲Firefox主要是因爲一個令人意外的事故 - 目前沒有標準或文檔要求這種實現,據我所知)。所以不要期待多個readystatechange事件使用超時。 – hallvors 2010-04-20 13:56:18

0

我真的不知道答案是什麼。但我知道Opera支持服務器事件:http://my.opera.com/WebApplications/blog/show.dml/438711。也許這是一個朝向an step的步驟?我並不確定,但我認爲他們在Opera Unite中使用它。

+0

不,它不像我說的那樣使用事件源。事件源在Opera 10.51中完全崩潰,並且gmail仍然會對gchat進行流式處理。 – Unknown 2010-04-18 00:54:08

0

我認爲,相當跨瀏覽器(包括Opera)的方法可能是通過Adobe Flash應用程序流式傳輸數據。雖然它會引入對Flash插件的依賴,因此不太流行。

0

我是一個與goog.netBrowserChannel兼容的projess C++ HTTP服務器的作者。你可以找到我,而在這裏學習的協議寫的文檔:

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

長話短說,BrowserChannel使用永遠在IE和XHR上的所有其他瀏覽器框架流。該協議被分成幾個階段,其中第一個是網絡測試:

1)測試網絡以保證響應「流」被支撐(換句話說沒有緩衝代理存在)
2)檢查訪問各種網絡前綴(以確保網絡管理員沒有阻止訪問聊天)

然後實際的數據傳輸可以開始。數據分爲兩個通道(前向和後向)。反向頻道是一系列長期存在的(每個約4分鐘)請求,用於服務器將內容「流」到客戶端。爲此,使用了HTTP分塊編碼。客戶端最好確保一個反向通道始終打開。服務器每隔4分鐘關閉一次,之後客戶端將打開一個新的反向通道。前向通道用於將數據從客戶端發送到服務器。數據的推送按需要完成。