开发一个优雅的发布-订阅架构在面向Web的应用中是一个真正的挑战。虽然有一些非常有趣的解决方案使用长轮询连接(例如COMET)和重复超时(例如js setTimeout)。在我看来,AJAX推送仍然像是一层层的调整和hack,迫使无辜的HTTP协议。
那么你认为AJAX推送是HTTP协议的畸形吗?
在Web架构中,你还可以考虑哪些其他选择?
那么你认为AJAX推送是HTTP协议的畸形吗?
在Web架构中,你还可以考虑哪些其他选择?
我曾看到另一种选项是使用一个小型隐藏的Java或Flash通过普通套接字连接到远程服务器。然后,服务器可以随时通过这些套接字推送数据/事件,而无需客户端轮询。
我认为Flash稍微好一些,因为它不需要签名的小程序(这会为用户弹出安全警告)。它已经有了套接字功能大约9年了,尽管直到Flash 9 / AS3才获得“纯”套接字,您可以使用它们连接到任何类型的服务(以前需要将消息终止为“null”包,这意味着您必须专门为Flash设计协议,而不能使用XMPP或SMTP或任何现有协议)。
在Web架构中,你还可以考虑哪些其他选择?
HTML 5的Web Sockets API和Server-sent Events看起来很有前途。目前Web Sockets还不支持IE,而Server-sent Events仍处于实验阶段。Douglas Crockford的JSONRequest提案也是AJAX推送的一个有趣的替代方案,但现代浏览器尚未实现它。
目前,我会坚持使用Comet。
仅考虑最常见的Comet实现,你必须欺骗浏览器以认为它正在接收多部分响应或在iframe中包含无限长的HTML,这已足以引起对于该技术是否适合工作的疑虑。