异步的servlet长轮询和贝叶协议之间差(彗星)(Difference between async

2019-08-06 09:42发布

是什么简单的异步servlet和彗星/贝叶协议之间的区别?

我想实现一个“服务器推送”(或“反转Ajax”)样的网页,作为当事件在服务器上发生的从服务器接收更新。 所以,即使没有客户明确地发送一个请求,我需要服务器能够发送响应特定的客户端浏览器。

据我所知,彗星是对于此类技术的总称; 与“贝叶”是协议。 但是,当我通过Servlet规范看了,连“异步的servlet”似乎完成同样的事情。 我的意思是我可以定义与一个简单的servlet

<async-supported>

属性设置为true在web.xml; 和servlet将能够异步发送响应到客户端。 那么我就可以有一个基于jQuery的或ExtJS的AJAX客户端,只是不断做

long_polling() 

打电话到servlet。 喜欢的东西是什么在下面的链接描述http://www.ibm.com/developerworks/web/library/wa-reverseajax1/index.html#long

所以我的问题是这样的:

是什么简单的异步servlet和彗星/贝叶协议之间的区别?

谢谢

Answer 1:

这是事实,“彗星”是这些技术术语,但贝叶协议只由少数实现使用。 彗星技术可以使用它想要的任何协议; 贝叶就是其中之一。

话虽如此,有一个异步的servlet溶液和彗星+贝叶溶液之间的两个主要区别。

第一个区别是,彗星+贝叶溶液是独立于传输贝叶协议的。 在的cometd项目中,有两个客户端和服务器可以承载贝叶可插拔传输。 你可以随身携带,使用HTTP,用贝叶是一个POST请求的内容,但你也可以使用的WebSocket,与贝叶是WebSocket的消息的有效载荷携带。 如果使用异步servlets时,你不能利用的WebSocket,这是方式更有效比HTTP。

第二个区别是异步的servlet只能携带HTTP,你需要更多的处理远程彗星的客户。

例如,您可能希望唯一标识客户,使2个标签在同一页结果2级不同的客户。 要做到这一点,你需要一个“属性”添加到异步servlet请求,让我们把它sessionId

接下来,你要能够验证客户端; 只有经过身份验证的客户端可以得到sessionId 。 但首先要求进行身份验证及其他后续已认证的请求区分,需要他人财产,说messageType

接下来,您希望能够快速地通知,由于网络损耗或其他连接问题断开; 所以你需要拿出一个心脏搏动的解决方案,这样,如果心脏跳动时,你知道该连接是活的,如果它不打你知道这是死了,执行救援行动。

接下来,你需要断开连接的功能。 等等。

很快你意识到你正在构建其他协议在HTTP之上。

在这一点上,它是更好地重用现有的协议一样贝叶,和成熟的解决方案,如的cometd(这是基于使用贝叶协议彗星技术),让你:

  • 简单但功能强大的API Java和JavaScript客户端库
  • Java服务器库,而无需通过处理注释的服务水平低的细节,如HTTP或WebSocket的执行应用程序逻辑
  • 交通运输可插拔,客户机和服务器
  • 贝叶协议的可扩展性
  • 懒惰的邮件
  • 聚类
  • 顶级性能
  • 面向未来:WebSocket的来临之前的cometd的用户并没有改变的代码行采取的WebSocket的优势 - 所有的魔法是在库中执行
  • 基于标准
  • 设计和维护的网络协议专家
  • 扩展文件
  • 我可以继续,但你明白了吧:)

你不希望使用该捆绑你只有HTTP低级别的解决方案。 你想用,从使用的彗星技术,并从运输贝叶,让您的应用程序可以被写入一次,并充分利用未来的技术改进协议抽象申请更高级别的解决方案。 随着技术进步为例,的cometd运作良好方式之前异步的servlet走进画面,现在用异步的servlet刚刚成为更具可扩展性,因此您的应用程序,而不需要改变单一的线中的应用。

通过使用更高级别的解决方案,您可以专注于应用程序,而不是如何正确地写一个异步的servlet血淋淋的细节(和一个可能认为它不是那么容易)。

在回答你的问题可能是:你用彗星+贝叶因为你要站在巨人的肩膀上 。



文章来源: Difference between async servlet long poll and bayeux protocol (Comet)