我试图在tomcat (7.0.50)上部署cometd (3.0.1)。以前,我使用的是cometd (3.0.1)和Jetty9.2.2。
我可以看到cometd依赖于一些jetty库(如前面提到的这里 ),但是这些依赖项是什么?
此外,我还跟踪这文章,并将其与“并发异步写入”混淆起来。
据说,"CometD 3已被修改以避免并发异步写入,这是规范所允许的,但Tomcat拒绝。“
它是否意味着与这个“真实”有关的东西。我应该把它弄错吗?Cometd 常见问题
有人能帮忙吗?
谢谢
编辑
在码头,我用的是下面的罐子。如果我用的是猫,我可以移除其中的哪一个。
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发布于 2015-04-16 16:41:04
CometD 3在Servlet容器中是完全可移植的,因此它将在Tomcat以及这两个容器中的Jetty、模块化bug中工作。
CometD所依赖的Jetty库也是完全可移植的(只是实用程序库)。确切的依赖项取决于您想要的CometD的哪些特性。最小集是:
jetty-utiljetty-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>无关,您必须按照文档中的指定启用它。
https://stackoverflow.com/questions/29675728
复制相似问题