ajax - 轮询、Comet、WebSockets 等

标签 ajax comet websocket polling

我需要在 Web 应用程序中构建一些非常激进的“自动刷新”功能。它有点像照片库,图像存储在 AmazonS3 上,但有关图像的数据存储在我们自己的数据库中。我玩过轮询服务器并发送 ajax 调用以获取更新的数据。我真的很担心使用这种方法对服务器的负载。有时,页面需要每 15 到 30 秒更新一次。

我一直在阅读 Comet,但我并不认为这个“黑客”是个好主意。 WebSockets 可能会有所帮助,但我担心它们太新且不受支持。那么,话虽如此,是否有人对构建一个需要经常刷新并有可能拥有非常高用户群的系统的方法有任何建议?

我不同意只是在问题上投入更多的服务器,但也不相信这是最好的方法。在其他人建议之前,我不能做 Flex,因为 Web 应用程序必须在 iPad 上运行。

最佳答案

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

如果您使用 WebSockets,您可能还需要考虑推送更新而不是让客户端轮询。这将有助于防止客户端意外对服务器进行 DDOS 攻击。客户端的延迟只会增加,此时您可以开始在服务器端添加更多资源。

如果服务器端 Javascript 没有问题,那么您可以查看 Socket.IO这是一个 Nodejs WebSockets 框架,它选择客户端和服务器自动支持的最佳传输(首选 native WebSockets,然后是 WebSockets 回退,然后是各种长轮询选项)。它还使服务器和客户端代码看起来非常相似,因为它包含一个客户端库。 Socket.IO 目前似乎有相当多的思想共享。

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

关于ajax - 轮询、Comet、WebSockets 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855992/

相关文章:

java - Websocket 最大缓冲区大小

node.js - 从 Node v6.7.0 升级到 v8.11.1 时性能糟糕

javascript - 我如何使用 querySelector() 选择具有双类的元素

Javascript 变量似乎是静态的

ajax - AJAX 和 Node.js 交互的问题

node.js - Node.js 有没有办法将数据库结果异步推送到客户端?

java - Spring的DeferredResult setResult与超时的交互

jquery - 在 Tomcat 服务器上使用 JQuery 进行长轮询的问题

javascript - 将 jQuery Post 发送到 API 时出现 Access-Control-Allow-Origin 错误

更新输出时的python子进程回调