持久化HTTP,Comet
保持HTTP连接活跃并在键入字符时发送字符
*2014年修订:另外,请查看WebSocket和HTTP/1.1 Upgrade header。浏览器在2010年左右开始实现这个功能,因此我将其添加到原始答案中。
服务器推送是一种等待、响应、关闭、重新打开的范式:
等待: 当GWT代码调用您的服务器请求某些尚未拥有的数据时,冻结(等待)
响应: 一旦所请求的数据可用,立即响应
关闭: 然后关闭连接。
重新打开: 一旦您的GWT代码接收到响应,立即打开一个新的连接来查询下一个事件。
查看视频,在第55分钟左右(接近结尾)Google Wave: Powered by GWT
问:您如何实现持久连接,长时间的HTTP连接?
答:未来计划是使用HTML5 Web Sockets。长期来看,这是我们目前正在使用的技术。
问:是否有平台或库可以下载并进行测试?
答:不确定。我认为没有。
附言:这就是他说的话。对我来说,它并没有太多意义(“未来计划”与“目前正在使用”之间的矛盾)。任何以英语为母语的人都可能想验证我是否正确地记录了它?
WebSockets的整个目的是让浏览器保持与服务器的双向套接字打开,以便可以使用实时通信。当有人在另一端(如Wave客户端)输入时,它会触发一个事件,该事件被发送到服务器,服务器会查看谁还应该接收该事件并将其传递给它们,例如输入的字母。
WebSocket和Comet是不同的。
格兰维尔
我花了一些时间反向工程Google Wave客户端代码(无耻地插入http://antimatter15.com/misc/read/,这是一个只读的公共客户端,适用于所有公共Wave,无需机器人或小工具,在Google没有推出升级时非常有用)。
总之,Google使用GWT框架和Google Closure库的某些方面(实际上是开源和文档化的),并且他们使用goog.net.BrowserChannel库,从注释中可以看出它也用于Gmail内的聊天功能。
http://closure-library.googlecode.com/svn/docs/closure_goog_net_browserchannel.js.html
现在可能使用的是comet,将来可以尝试使用websocket。因为它能够在Firefox 3.5中运行,并且据我所读,websocket仅在Firefox的夜间版本中可用...但我可能是错的...因为似乎在IE中根本无法工作。
我会假设他们使用ajax请求。执行XMLHttpRequest,它是异步的,当服务器有数据要发送给您的浏览器时,注册的javascript回调函数获取数据并进行任何操作。因此,基本上浏览器请求下一个事件,处理它,无限重复。