我现在正在查看facebook新闻提要/自动收录器,我想知道当我的任何连接进行更新时,它使用什么技术/架构来异步提取数据。我能想到的一种可能性是在一个函数上使用javascript setInterval
来积极地轮询服务器以获取新数据。
我想知道效率如何。
我能想到的另一种可能的技术是Comet / NodeJS架构,它可以在服务器上有更新时ping客户端。我对这项技术不太熟悉。
如果我想创造类似于此的东西。我该怎么办?第一种方法是首选方法吗?有哪些技术可以让我这样做?
答案 0 :(得分:12)
有几种技术可以实现这一目标:
通常人们在浏览器中没有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章)致力于'与彗星一起缩放'。
答案 1 :(得分:0)
我可能错了,但我认为Facebook依赖于“长轮询”技术,该技术可以在一段固定的时间内保持http连接对服务器开放。从服务器发送的数据触发当时被操作的事件客户端。我想他们会使用这种技术来支持没有内置websocket支持的旧浏览器。
我个人一直在研究具有类似要求的应用程序,并选择使用node.js和socket.io的组合。 socket.io模块使用各种轮询解决方案,并根据客户端上可用的内容自动选择最佳解决方案。
答案 2 :(得分:0)
也许你可以看一下Goliath(用Ruby编写的非阻塞IO服务器):http://postrank-labs.github.com/goliath/