2010-04-17 65 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分钟关闭一次,之后客户端将打开一个新的反向通道。前向通道用于将数据从客户端发送到服务器。数据的推送按需要完成。