首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cometd on Tomcat

Cometd on Tomcat
EN

Stack Overflow用户
提问于 2015-04-16 13:10:15
回答 1查看 830关注 0票数 0

我试图在tomcat (7.0.50)上部署cometd (3.0.1)。以前,我使用的是cometd (3.0.1)和Jetty9.2.2。

我可以看到cometd依赖于一些jetty库(如前面提到的这里 ),但是这些依赖项是什么?

此外,我还跟踪文章,并将其与“并发异步写入”混淆起来。

据说,"CometD 3已被修改以避免并发异步写入,这是规范所允许的,但Tomcat拒绝。“

它是否意味着与这个“真实”有关的东西。我应该把它弄错吗?Cometd 常见问题

有人能帮忙吗?

谢谢

编辑

在码头,我用的是下面的罐子。如果我用的是猫,我可以移除其中的哪一个。

代码语言:javascript
复制
jetty-client.jar,
jetty-continuation.jar,
jetty-http.jar,
jetty-io.jar,
jetty-jmx.jar,
jetty-security.jar,
jetty-servlet.jar,
jetty-servlets.jar,
jetty-server.jar,
jetty-util.jar,
jetty-util-ajax.jar,
jetty-webapp.jar,
jetty-deploy.jar,
jetty-xml.jar,
jetty-annotations.jar
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 16:41:04

CometD 3在Servlet容器中是完全可移植的,因此它将在Tomcat以及这两个容器中的Jetty、模块化bug中工作。

CometD所依赖的Jetty库也是完全可移植的(只是实用程序库)。确切的依赖项取决于您想要的CometD的哪些特性。最小集是:

  • jetty-util
  • jetty-util-ajax

但是,强烈建议您使用像Maven这样的依赖工具,并且忘记手动满足项目的依赖关系。

CometD提供了底漆教程来帮助您入门。

JSR356 WebSocket标准提供了一种使用异步API发送WebSocket消息的方法。

JSR 356的Jetty实现允许并发使用这些API,而Tomcat实现不允许并发使用这些API。由于并发使用这些API在CometD中很常见,因此事实证明,CometD在Jetty中运行良好,在Tomcat中则不然。因此,为了跨容器的可移植性,对CometD进行了修改,以避免并发写入,因为JSR 356规范对于API的确切语义过于模糊。

更新:有两种处理并发使用WebSocket API的方法。

第一种情况是,WebSocket实现负责并发性;像CometD这样的应用程序可以并发调用WebSocket API,而且在内部,该实现有synchronized块,或者排队或任何其他解决方案,以确保消息不被破坏。两个线程将能够同时调用WebSocket API,但最终消息处理将被序列化,消息将一个接一个地发送。

第二种方法是让应用程序(CometD)在调用WebSocket API之前处理并发性,并应用synchronized块或排队等。

Jetty实现了第一个解决方案,Tomcat没有。因此,对CometD进行了修改,以实现第二个解决方案。

这意味着您可以不用担心地同时使用CometD API (最终将调用WebSocket API),因为并发性由CometD适当处理,以便跨Servlet容器及其WebSocket实现进行移植。

WebSocket异步写入与web.xml中的<async-supported>无关,您必须按照文档中的指定启用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29675728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档