Javascript Gmail如何在Opera上实现comet?

Javascript Gmail如何在Opera上实现comet?,javascript,ajax,gmail,comet,opera,Javascript,Ajax,Gmail,Comet,Opera,我想知道Gmail(或其他任何人)如何在Opera上运行comet 这是我从实验中了解到的 它没有使用Opera 10.51中损坏的标签 它不使用iframe,iframe显示旋转的跳动器和忙碌的鼠标光标 当readyState=3时,它不会在xmlhttprequest上使用responseText,这在Opera上被破坏 我试着看看mibbit和etherpad是如何实现的,我发现它们都使用长轮询 赏金 谁能告诉我一种比Opera comet流媒体的“事件源”更好的方法,谁能告诉我gmail

我想知道Gmail(或其他任何人)如何在Opera上运行comet

这是我从实验中了解到的

  • 它没有使用Opera 10.51中损坏的标签
  • 它不使用iframe,iframe显示旋转的跳动器和忙碌的鼠标光标
  • 当readyState=3时,它不会在xmlhttprequest上使用responseText,这在Opera上被破坏
  • 我试着看看mibbit和etherpad是如何实现的,我发现它们都使用长轮询

    赏金


    谁能告诉我一种比Opera comet流媒体的“事件源”更好的方法,谁能告诉我gmail是如何进行流媒体的(如果是这样的话,还可以进行长时间轮询)。

    我真的不知道答案是什么。但我知道Opera支持服务器事件:。也许这是迈向安瓦尔的一步? 我也不是很确定,但我认为他们在Opera Unite中使用了它。

    GMail使用BrowserChannel(|),这是谷歌的

    • @BrowserChannel类的fileoverview定义。浏览频道
    • 通过HTTP模拟双向套接字。这是该计划的基础
    • Gmail聊天即时通讯连接到服务器

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

    < P>我是一个与Goo.NETBuffServer兼容的C++进程HTTP服务器的作者。您可以在这里找到我在研究协议时编写的文档:

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

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


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

    不,它没有像我说的那样使用事件源。Opera 10.51中的事件源完全被破坏,gmail仍然可以传输gchat。想一想你实际上在找什么:搜索pollResponse和getNextChunk,你能说得更具体一点吗?我觉得我已经给了足够慷慨的赏金来保证一个答案,而不仅仅是一个到一个巨大的抽象库的链接。好吧,我觉得这应该留给Jason,因为他给出了最初的闭包指针,我只是稍微深入了一点。。查看该源代码,它似乎确实使用了异步XMLHttpRequest,超时负责轮询responseText并处理传入数据。Opera不会在数据块进入时触发几个readystatechange事件(我认为Firefox这样做主要是出于一个愉快的意外——据我所知,没有标准或文档强制要求此实现)。因此,他们没有期望发生多个readystatechange事件,而是使用超时。@hallvors,是的,我是在向Jason讲话。如果你留下一个更详细的答案,我会接受你的,除非你觉得杰森值得赏金。不幸的是,BrowserChannel上的文档非常少,我自己也没有任何第一手的经验,所以我不能说它是如何解决这个特殊问题的。您所能做的最好的事情就是查看代码并尝试解决它。如果你认为我不配得到赏金,我没问题,我只是想给你指出一个有用的方向。