javascript - 实时轮询背后的技术

标签 javascript ruby-on-rails node.js real-time comet

我现在正在查看 facebook 新闻提要/代码,我想知道它使用什么技术/架构在我的任何连接进行更新时异步提取数据。我能想到的一种可能性是在主动轮询服务器以获取新数据的函数上使用 javascript setInterval

我想知道这有多有效。

我能想到的另一种可能的技术是 Comet/NodeJS 架构,当服务器上有更新时,它会 ping 客户端。我不太熟悉这项技术。

如果我想创建类似的东西。我应该调查什么?第一种方法是执行此操作的首选方法吗?有哪些可用的技术可以让我做到这一点?

最佳答案

有几种技术可以实现这一点:

  • 轮询:应用程序每 x 毫秒发出一次请求以检查更新
  • 长轮询:应用程序向服务器发出请求,但服务器仅在有新数据可用时才响应(通常如果在 X 秒内没有新数据可用,则发送空响应或连接被终止)
  • forever frame:在页面中打开一个隐藏的 iframe,并请求依赖 HTTP 1.1 分块编码的文档
  • XHR 流式传输:允许从服务器发送连续的消息,而无需在每次响应后发出新的 HTTP 请求
  • WebSockets:这是最好的选择,它始终保持连接
  • Flash WebSockets:如果浏览器本身不支持 WS,那么您可以包含一个 Flash 脚本来增强该功能

当 WebSockets(最有效的传输)在浏览器中不可用时,人们通常使用 Flash WebSockets 或长轮询。

关于如何结合多种传输技术并将它们抽象出来的完美示例是 Socket.IO .

其他资源:

http://en.wikipedia.org/wiki/Push_technology
http://en.wikipedia.org/wiki/Comet_(programming) )
http://www.leggetter.co.uk/2011/08/25/what-came-before-websockets.html
Server polling with JavaScript
Is there a difference between long-polling and using Comet
http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery
讨论不同技术的视频:http://vimeo.com/27771528

本书Even Faster Websites有一整章(第 8 章)专门介绍“使用 Comet 进行缩放”。

关于javascript - 实时轮询背后的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724820/

相关文章:

javascript - 购物车仅使用 Jquery 和 Codeigniter 更新一次

ruby-on-rails - Rails,如何制作记录上次访问时间的数据库模型

ruby-on-rails - 使用 Ubuntu VVM 开发 Rails 非常慢

node.js - gulp,找不到命令 - 之前工作正常,然后突然停止

javascript - 表单提交字段为空白。使用 Javascript 隐藏和显示字段

javascript - 我们可以通过纯 JS 调用从用户 openID 获取用户名和电子邮件和\或任何其他用户定义数据吗? (根本没有服务器端)

javascript - 使用 JEST 测试 DOM 元素

jquery - 处理表单发布、nodejs 和 JQueryMobile

javascript - 为一个元素设置多个属性

ruby-on-rails - 回形针 - 从 Amazon S3 中删除文件?