轮询、Comet、WebSockets等技术在IT领域中很常见。

8

我需要在一个Web应用程序中构建一些非常强大的“自动刷新”功能。这是一个照片库,图像存储在AmazonS3上,但关于图像的数据存储在我们自己的数据库中。我尝试过轮询服务器并发送Ajax调用来获取更新的数据。我真的很担心使用这种方法会对服务器造成负担。有时,页面需要每15到30秒更新一次。

我一直在研究Comet技术,但我不确定这种“hack”是否是一个好主意。WebSockets可能会有所帮助,但我担心它们太新且缺乏支持。所以,基于此,有没有人有关于如何架构系统的建议,这个系统需要经常刷新并具有很高的用户群体?

我不反对只是投入更多的服务器来解决问题,但我并不认为这是最佳方法。而且,在其他人提出建议之前,我不能使用Flex,因为Web应用程序必须在iPad上运行。

2个回答

7

WebSockets似乎是一个相当不错的选择。Firefox 4和Opera 11中禁用WebSockets可能是暂时的,因为工作组已经开始发布解决问题的草案。此外,web-socket-js Flash回退仍将在禁用本地WebSockets的浏览器上工作。值得注意的是,iOS 4.2具有本地WebSockets。因此,使用本地WebSockets + 回退,WebSockets几乎在所有地方都受支持。

如果您使用WebSockets,则还可能希望考虑推送更新而不是让客户端轮询。这将有助于防止客户端意外DDOS服务器。延迟只会增加客户端,并且在那时,您可以开始在服务器端添加更多资源。

如果不排除使用服务器端Javascript,则可以查看Socket.IO,它是一个Nodejs WebSockets框架,自动选择客户端和服务器都支持的最佳传输方式(首选本地WebSockets,然后是WebSockets回退,然后是各种长轮询选项)。它还包括一个客户端库,使服务器和客户端代码非常相似。Socket.IO目前似乎有很多关注度。

如果您是以Ruby为中心的,则可能要查看em-websockets。Socket.IO和em-websockets都是基于事件的服务器,允许非常高的客户端数,特别是在延迟而不是带宽至关重要的情况下。


对于清晰且有说服力的解释,提供替代方案和参考资料,谢谢。 - limist
...并尝试使用Java的CometD!我强烈推荐它! - Karussell

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接