Gmail如何在Opera上彗星?

Unk*_*own 10 javascript ajax opera gmail comet

我想知道Gmail(或其他任何人)如何在Opera上彗星.

以下是我对实验的了解.

  1. 它不使用在Opera 10.51中断开的事件源标记.
  2. 它不使用iframe来显示旋转的颤动和繁忙的鼠标光标.
  3. 当readyState = 3时,它不会在xmlhttprequest上使用responseText,这已知在Opera上被破坏.

我试着看看它是如何在mibbit和etherpad中完成的,我发现它们都使用了长轮询.

赏金

赏金归于谁能告诉我一种方法比Opera彗星流的"事件源"更好,或者gmail如何进行流式传输(或者如果它那么长时间轮询).

Jas*_*all 9

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

  • @fileoverview BrowserChannel类的定义.一个BrowserChannel
  • 通过HTTP模拟双向套接字.它是基础
  • Gmail聊天与服务器的IM连接.

  • 好吧,我有点觉得应该留给Jason,因为他把原始指针给了Closure,我只是更深入了一下.看看那个源代码,它似乎确实使用异步XMLHttpRequest,超时负责用于轮询responseText并处理传入的数据.当chunked数据进入时,Opera不会触发几个readystatechange事件(我认为Firefox主要是由于一个快乐的事故 - 据我所知,没有标准或文档要求这个实现).因此,他们不会期待多个readystatechange事件,而是使用超时. (3认同)