AJAX推送是HTTP协议的异常吗?

7
开发一个优雅的发布-订阅架构在面向Web的应用中是一个真正的挑战。虽然有一些非常有趣的解决方案使用长轮询连接(例如COMET)和重复超时(例如js setTimeout)。在我看来,AJAX推送仍然像是一层层的调整和hack,迫使无辜的HTTP协议。
那么你认为AJAX推送是HTTP协议的畸形吗?
在Web架构中,你还可以考虑哪些其他选择?
4个回答

5

我曾看到另一种选项是使用一个小型隐藏的Java或Flash通过普通套接字连接到远程服务器。然后,服务器可以随时通过这些套接字推送数据/事件,而无需客户端轮询。

我认为Flash稍微好一些,因为它不需要签名的小程序(这会为用户弹出安全警告)。它已经有了套接字功能大约9年了,尽管直到Flash 9 / AS3才获得“纯”套接字,您可以使用它们连接到任何类型的服务(以前需要将消息终止为“null”包,这意味着您必须专门为Flash设计协议,而不能使用XMPP或SMTP或任何现有协议)。


4

在Web架构中,你还可以考虑哪些其他选择?

HTML 5的Web Sockets APIServer-sent Events看起来很有前途。目前Web Sockets还不支持IE,而Server-sent Events仍处于实验阶段。Douglas Crockford的JSONRequest提案也是AJAX推送的一个有趣的替代方案,但现代浏览器尚未实现它。

目前,我会坚持使用Comet


2
轮询是实现发布-订阅的Web架构方式。当客户端轮询不频繁且响应可以被缓存和共享时(例如博客的RSS提要),它能够良好地工作。对于每个客户端保持一个TCP套接字,就像使用Comet一样,不是使用HTTP的理想方式。然而,如果您的应用程序在Web浏览器中运行,并且需要频繁、唯一、针对每个客户端的更新,那么这不是一个坏的方法。
使用Comet和轮询来获取每个客户端资源并不完全滥用HTTP或Web——只是HTTP和Web特别设计用于在多个客户端之间共享相同的资源(即Web页面),因此这是最佳的工作方式。

1

仅考虑最常见的Comet实现,你必须欺骗浏览器以认为它正在接收多部分响应或在iframe中包含无限长的HTML,这已足以引起对于该技术是否适合工作的疑虑。


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