Gmail如何在Opera上彗星?

时间:2010-04-17 06:04:56

标签: javascript ajax gmail comet opera

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

以下是我对实验的了解。

  1. 它不使用在Opera 10.51中断开的event-source标记。
  2. 它不使用iframe来显示旋转的颤动和忙碌的鼠标光标。
  3. 当readyState = 3时,它不会在xmlhttprequest上使用responseText,这已知在Opera上已被破坏。
  4. 我试着看看它是如何在mibbit和etherpad中完成的,我发现它们都使用了长轮询。

    恩惠

    无论谁能告诉我一种比Opera事件流的“事件来源”更好的方法,或者gmail如何进行流式传输(或者长时间轮询,如果它能够这样做),那就是赏金。

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:0)

我真的不知道答案是什么。但我知道Opera支持服务器事件:http://my.opera.com/WebApplications/blog/show.dml/438711。也许这是朝向anwser迈出的一步? 我也不确定,但我认为他们在Opera Unite中使用它。

答案 2 :(得分:0)

我认为相反的跨浏览器(包括Opera)方法可能是通过Adobe Flash应用程序传输数据。虽然它会引入对Flash插件的依赖,但并不是很受欢迎。

答案 3 :(得分:0)

我是一个与goog.netBrowserChannel兼容的progess C ++ HTTP服务器的作者。您可以在此处查找我在编写协议时编写的文档:

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

长话短说,BrowserChannel在IE上使用永久帧,在所有其他浏览器上使用XHR流。该协议分为几个阶段,第一阶段是网络测试:

1)测试网络以确保支持响应“流”(换句话说,不存在缓冲代理)
2)检查对各种网络前缀的访问(以确保网络管理员没有阻止访问聊天)

然后可以开始实际的数据传输。数据分为两个通道(前向和后向)。反向信道是一系列长期存在的(每个约4分钟)请求,用于服务器将内容“流”到客户端。为此,使用HTTP分块编码。客户端最好确保一个反向通道始终处于打开状态。服务器将大约每4分钟关闭一次,之后客户端将打开一个新的反向通道。前向信道用于将数据从客户端发送到服务器。必要时可以推送数据。