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 中的实时输入是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测客户端是不是故意离开 Google Play 游戏实时多人游戏中的房间?
使用 Google Speech to Text API 从 Web 应用程序中的麦克风捕获实时音频 [关闭]
我的渲染技术进阶之旅Google开源的基于物理的实时渲染引擎Filament源码分析:在android中如何使用matc命令自动将输入材质定义.mat文件转换为输出材质包.filamat文件?