我确信 Wave 不会每毫秒轮询服务器以查明其他用户是否输入了某些内容……那么我如何才能看到其他人在输入时输入的内容?并且不会占用带宽。
9 回答
持久 HTTP,彗星
保持 HTTP 连接处于活动状态并在输入字符时发送字符
* 2014 年编辑:另外,看看 WebSocket 和HTTP/1.1 升级标头。浏览器在 2010 年左右开始实施此功能,因此我将其添加到原始答案中。
他们可能使用 Web Sockets,也就是服务器发送的事件:http ://www.w3.org/TR/websockets可以在 IETF找到底层协议(作为草案) 。
更新:似乎 WebSockets 还没有任何实现;来自 Google I/O 的视频(转到 11:00)讲述了一个长期存在的 HTTP GET 请求。
服务器推送是等待、响应、关闭、重新打开的范例:
等待:当 GWT 代码向您的服务器调用一些您还没有的数据时,冻结(等待)
响应:一旦请求的数据
可用,就用它来响应关闭:然后,关闭连接。
重新打开:一旦您的 GWT 代码收到响应,立即打开一个新连接以查询下一个事件。
观看视频Google Wave:在第 55 分钟左右由 GWT 提供支持(接近尾声)
问:你如何实现持久连接,长期存在的 http 连接
A:未来计划:HTML5 Web Sockets。长期。这就是我们目前使用的。
问:有没有可以下载和玩的平台或库?
答:不确定。不要这么想
PS:他是这么说的。对我来说,这没有多大意义(“未来计划”与“目前使用”)。任何以英语为母语的人都可能想验证我是否正确转录?
纯粹的猜测,但它可以使用HTML 5 规范中的服务器端 DOM事件吗?
WebSockets 的全部原因是让浏览器保持一个对服务器开放的双向套接字,以便可以使用实时通信。当有人在另一端打字时,在 wave 客户端中,它会触发一个发送到服务器的事件,然后服务器会查看谁也应该接收该事件并将该事件传递给他们,在这种情况下是键入的字母。
WebSocket 和 Comet 是不同的。
格兰维尔
未来可能是现在的彗星 websocket。因为它可以在 Firefox 3.5 中运行,并且根据我的阅读,websocket 仅在 FF 的夜间版本中可用......不过我可能是错的......因为它似乎根本无法在 IE 中运行。
我花了一些时间对 Google Wave 客户端代码进行逆向工程( http://antimatter15.com/misc/read/的无耻插件,它是用于所有公共 wave 的 google wave 的只读公共客户端,无需机器人或小工具一个月前,当谷歌没有启动升级时,它更有用)。
无论如何,Google 使用 GWT 框架和 Google Closure 库的某些方面(实际上是开源的并记录在案),他们使用 goog.net.BrowserChannel 库,从评论中该库也用于 gmail 中的聊天功能。
http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html
我会假设他们使用 ajax 请求。执行一个异步的 XMLHttpRequest,当服务器有东西要发送给您的浏览器时,注册的 javascript 回调会获取数据并对其进行任何处理。所以基本上浏览器请求下一个事件,处理它,无限重复。