我需要在Web应用程序中构建一些非常激进的“自动刷新”功能.它是一种照片库,图像存储在AmazonS3上,但有关图像的数据存储在我们自己的数据库中.我玩过轮询服务器并发送ajax调用以获取更新的数据.我真的很担心这种方法对服务器的负载.有时,页面需要每15到30秒更新一次.
我一直在看Comet,我只是没有卖掉这个“黑客”是个好主意. WebSockets可能会有所帮助,但我担心它们太新,太不受支持了.那么,话虽这么说,是否有人建议如何构建一个需要经常刷新并有可能拥有非常高的用户群的系统?
我并不认为只是为问题投入更多的服务器,但不相信这也是最好的方法.在其他人建议之前,我不能做Flex,因为网络应用程序必须在iPad上运行.
WebSockets似乎是一个相当不错的选择.由于工作组已经开始发布解决问题的草案,因此在Firefox 4和Opera 11中禁用WebSockets可能是暂时的.此外,即使在已禁用本机WebSockets的浏览器上,web-socket-js Flash回退仍然可用.另外值得注意的是iOS 4.2具有本机WebSockets.因此,使用本机WebSockets后备,几乎可以支持WebSockets.
如果您使用WebSockets,您可能还需要考虑推送更新而不是让客户端进行轮询.这将有助于防止客户端意外地DDOS服务器.延迟将为客户端增加,此时您可以开始在服务器端添加更多资源.
如果服务器端的Javascript不是不可能的,那么你可以查看Socket.IO这是一个Nodejs WebSockets框架,它选择客户端和服务器自动支持的最佳传输(更喜欢本机WebSockets,然后是WebSockets后备,然后是各种长投票选项).它还使服务器和客户端代码看起来非常相似,因为它包含一个客户端库. Socket.IO目前似乎有一点想法.
如果您是以Ruby为中心的,那么您可能需要查看em-websockets. Socket.IO和em-websocket都是基于事件的服务器,它允许非常高的客户端数量,特别是在延迟而不是带宽最重要的情况下.