【问题标题】:Cometd on TomcatTomcat上的彗星
【发布时间】:2015-04-16 13:10:15
【问题描述】:

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

我可以看到 cometd 依赖于 here 提到的一些码头库,但是这些依赖关系是什么?

我也在关注this 的帖子,并且对“并发异步写入”感到困惑。

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

它是否意味着与这个​​“真实”有关的东西。我应该把它弄错吗?彗星FAQ's

有人可以帮忙吗?

谢谢

编辑
使用码头,我正在使用以下罐子。如果我使用的是 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

【问题讨论】:

    标签: tomcat jetty cometd


    【解决方案1】:

    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 块,或排队或任何其他解决方案,以确保消息不被破坏。两个线程将能够同时调用 WebSocket API,但最终消息处理将被序列化,消息一个接一个地发送。

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

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

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

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

    【讨论】:

    • 感谢您分享此信息。只是为了了解角度,有没有办法在 3.0.1 版本的说码头上使用 cometd 并发写入,还是完全避免?
    • 我已经编辑了响应以阐明并发写入的使用。
    • 之前我是包含来自码头的 servlet-api.jar,现在我应该包含特定于 tomcat 的 jar 还是 j2ee servlet-api.jar 也可以工作?
    • 您绝不能在您的应用程序中包含 Servlet 或 JEE API jar,它们是由容器提供的。
    • 我不确定,但我需要 jetty-jmx.jar、jetty-servlet.jar、jetty-servlets.jar、jetty-server.jar、jetty-deploy.jar、jetty-xml。 jar, jetty-annotations.jar
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2011-03-13
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多