Google Wave 中的实时输入是如何工作的?

Posted

技术标签:

【中文标题】Google Wave 中的实时输入是如何工作的?【英文标题】:How does the live, real-time typing work in Google Wave? 【发布时间】:2009-05-31 16:39:23 【问题描述】:

我确信 Wave 不会每毫秒轮询一次服务器以查明其他用户是否输入了某些内容……那么我如何才能看到其他人在输入时输入的内容?而且不会占用带宽。

【问题讨论】:

这里的答案之一中有一些信息***.com/questions/928744/… 【参考方案1】:

持久 HTTP,Comet

保持您的 HTTP 连接处于活动状态并在输入字符时发送字符

*2014 年编辑:另外,看看 WebSocket 和 HTTP/1.1 Upgrade header。浏览器在 2010 年左右开始实施此功能,因此我将其添加到原始答案中。

【讨论】:

它真的使用 Comet,因为它使用 GWT? comet 是一个流行词,它不是任何已定义的框架或技术。你可以用 gwt 实现它,不用 gwt,随你喜欢【参考方案2】:

他们可能使用 Web Sockets,也就是服务器发送的事件:http://www.w3.org/TR/websockets 可以找到底层协议(作为草案)at the IETF。

更新:WebSockets 似乎还没有任何实现;和a video from Google I/O(转到 11:00)谈论一个长期存在的 HTTP GET 请求。

【讨论】:

不知道对用户有这样的限制!我会投票给你,给你更多的代表。 感谢您的投票,我现在编辑了我的答案以包含“多个超链接”,因此实际上链接到 IETF 草案。【参考方案3】:

Server Push in GWT

服务器推送是等待、响应、关闭、重新打开的范例:

等待:当 GWT 代码进行调用时 到您的服务器获取一些数据 还没有,冻结(等待)

响应:一旦请求的数据是 有空,回复一下

关闭:然后,关闭连接。

重新打开:一旦您的 GWT 代码收到响应,立即打开新连接以查询下一个事件。

【讨论】:

【参考方案4】:

在第 55 分钟左右(接近尾声)观看视频 Google Wave: Powered by GWT

问:如何实现持久连接,即长期存在的 http 连接

A:未来计划:html5 Web Sockets。长期。这就是我们目前使用的。

问:是否有平台或库可供我们下载和使用?

答:不确定。不要这么认为

P.S.:他是这么说的。对我来说,这没有多大意义(“未来计划”与“目前使用”)。任何以英语为母语的人都可能想验证我的转录是否正确?

【讨论】:

这很令人困惑,因为它有点脱离上下文。答案基本上意味着:是的,我们正在使用挂起请求(又名“彗星”)。未来的计划是在实现可用时迁移到 WebSockets。【参考方案5】:

纯属猜测,但它是否可以使用 HTML 5 规范中的 Server Side DOM 事件?

【讨论】:

【参考方案6】:

WebSockets 的全部原因是让浏览器保持一个对服务器开放的双向套接字,以便可以使用实时通信。当有人在另一端打字时,在 wave 客户端中,它会触发一个发送到服务器的事件,然后服务器会查看谁也应该接收该事件并将该事件传递给他们,在这种情况下是键入的字母。

WebSocket 和 Comet 是不同的。

格兰维尔

【讨论】:

【参考方案7】:

现在可能是彗星 websocket 未来。因为它可以在 Firefox 3.5 中运行,并且根据我所阅读的内容,websocket 仅在 FF 的夜间版本中可用......不过我可能是错的......因为它似乎根本无法在 IE 中运行。

【讨论】:

【参考方案8】:

我花了一些时间对 Google Wave 客户端代码进行逆向工程(http://antimatter15.com/misc/read/ 的无耻插件,它是用于所有公共 wave 的 google wave 的只读公共客户端,无需机器人或小工具,这更有用一个月前,当 Google 没有启动升级时)。

无论如何,Google 将 GWT 框架与 Google Closure 库的某些方面(实际上是开源并记录在案)一起使用,并且他们使用 goog.net.BrowserChannel 库,该库来自 cmets 也用于 gmail 中的聊天功能.

http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html

【讨论】:

【参考方案9】:

我会假设他们使用 ajax 请求。执行一个异步的 XMLHttpRequest,当服务器有东西要发送给您的浏览器时,注册的 javascript 回调会获取数据并对其进行任何处理。所以基本上浏览器请求下一个事件,处理它,无限重复。

【讨论】:

XMLHttpRequest 被发送一次,如果没有收到应答,连接被终止,即它。没有人会等待任何事情。这就是“彗星”技术所做的,非无休止的 GET 请求.. 在 wiki 上阅读此内容。

以上是关于Google Wave 中的实时输入是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

.Net 版 Google Wave

如何检测客户端是不是故意离开 Google Play 游戏实时多人游戏中的房间?

使用 Google Speech to Text API 从 Web 应用程序中的麦克风捕获实时音频 [关闭]

Google Play 游戏服务实时多人游戏停止工作

如何将 WAVE_MAPPER 音频线与其音频设备相关联

我的渲染技术进阶之旅Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用matc命令自动将输入材质定义.mat文件转换为输出材质包.filamat文件?