繁体   English   中英

AJAX是否推动了HTTP协议的异常?

[英]Is AJAX push a HTTP protocol aberration?

在面向Web的应用程序中开发优雅的Pub-Sub架构是一项真正的挑战。 虽然有一些非常有趣的解决方案使用长轮询连接(例如COMET)和重复超时(例如js setTimeout)。 恕我直言AJAX推送仍然看起来像一层调整和黑客强迫无辜的HTTP协议。

那么您认为AJAX是如何推动HTTP协议偏差的呢?

您可以在Web架构中考虑哪些其他替代方案?

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

Flash是一个更好的IMO,因为它不需要签名的applet(它会弹出用户的安全警告)。 它现在有9年以上的形式或者其他形式的套接字,但是直到Flash 9 / AS3,你才能使用“纯”套接字连接到任何类型的服务(之前它要求消息是以“null”数据包终止,这意味着您必须专门为闪存设计协议,而不是能够使用XMPP或SMTP或任何现有协议)

您可以在Web架构中考虑哪些其他替代方案?

HTML 5 Web套接字API服务器发送的事件看起来很有希望。 目前还没有IE支持Web套接字,而且服务器发送的事件仍然是实验性的。 Douglas Crockford的JSONRequest提议也是AJAX推送的有趣替代方案,但它尚未在现代浏览器中实现。

就目前而言,我会坚持使用Comet

轮询是做pub-sub的web架构方式。 当客户端不经常轮询并且可以缓存和共享响应时(例如,博客的RSS提要),它可以很好地工作。 保持每个客户端打开一个tcp套接字,就像使用comet一样,不是使用http的理想方式。 但是,如果您的应用程序在Web浏览器中运行,并且需要频繁,独特的每个客户端更新,那么这并不是一个糟糕的方法。

针对每个客户端资源的Comet和轮询并不是完全滥​​用http或网络 - 只是http和网络专门设计用于在许多客户端之间共享相同的资源(即网页),因此它的工作方式最佳。

想想最常见的Comet实现,只是你必须欺骗浏览器认为它在iframe中接收多部分响应或无限长的html足以引发一个关于这是否是适当技术的标志的事实为了工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM