gpt4 book ai didi

tomcat - Tomcat 上的 Cometd

转载 作者:行者123 更新时间:2023-11-28 22:55:01 26 4
gpt4 key购买 nike

我正在尝试在 tomcat (7.0.50) 上部署 cometd (3.0.1)。以前我使用 cometd (3.0.1) 和 jetty 9.2.2。

我可以看到 cometd 依赖于一些 jetty 库,如前所述 here ,但是这些依赖项是什么?

我也在关注this发布,并与“并发异步写入”相混淆。

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

是不是和这个“真”有关的意思。我应该把它弄错吗? Cometd FAQ's

有人可以帮忙吗?

谢谢

编辑
对于 jetty ,我正在使用以下 jar 。如果我使用的是 tomcat,我可以删除其中的哪些。

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

最佳答案

CometD 3 可以跨 Servlet 容器完全移植,因此它可以在 Tomcat 和 Jetty 中工作,对任一容器中的错误进行模数处理。

CometD 所依赖的 Jetty 库也是完全可移植的(只是实用程序库)。确切的依赖关系取决于您想要 CometD 的什么功能。最小集合是:

  • jetty-util
  • jetty-util-ajax

但是,强烈建议您使用 Maven 之类的依赖工具,而不必手动满足项目的依赖关系。

CometD 提供了 primertutorials让你开始。

JSR 356 WebSocket 标准提供了一种使用 asynchronous APIs 发送 WebSocket 消息的方法.

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

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

首先是 WebSocket 实现负责并发; CometD 等应用程序可以并发调用 WebSocket API,并且在内部实现具有 synchronized block ,或排队或任何其他适用于确保消息未损坏的解决方案。两个线程将能够并发调用 WebSocket API,但最终消息处理将被序列化,消息一个接一个地发送。

第二个是让应用程序 (CometD) 处理并发并应用 synchronized调用 WebSocket API 之前阻塞或排队等。

Jetty 实现了第一个解决方案,Tomcat 没有。因此,CometD 已被修改以实现第二种解决方案。

这意味着您可以并发使用 CometD API(最终将调用 WebSocket API)而无需担心,因为 CometD 妥善处理并发,以便跨 Servlet 容器及其 ​​WebSocket 实现可移植.

WebSocket 异步写入与 <async-supported> 无关在web.xml ,无论如何您都必须启用它,如 documentation 中指定的那样.

关于tomcat - Tomcat 上的 Cometd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com