0

我确信这很简单,但我不记得遇到过一个在其文档、API 和版本之间存在更多差异的库。(尽管平心而论,我确信它们存在!)据我查看的资源可以看出,我认为这非常接近“当前”,但我遇到了一个错误(没有 AtmosphereHandler 映射请求 /path/to/service/point) 并且需要一些关于我接下来应该尝试的指导。

我可以重新发布详细版本,但简而言之......

1)web.xml 有这个 servlet 条目(来自最新的?git chat 示例):

<servlet>
    <description>AtmosphereServlet</description>
    <servlet-name>AtmosphereServlet</servlet-name>
    <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>org.atmosphere.cpr.Broadcaster.supportOutOfOrderBroadcast</param-name>
        <param-value>false</param-value>
    </init-param>
    <!--<init-param>-->
    <!--<param-name>org.atmosphere.cpr.broadcasterClass</param-name>-->
    <!--<param-value>org.atmosphere.util.SimpleBroadcaster</param-value>-->
    <!--</init-param>-->
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>AtmosphereServlet</servlet-name>
    <url-pattern>/path/to/service/point</url-pattern>
</servlet-mapping>

2)网络应用程序具有此类定义(在 Scala 中):

@AtmosphereHandlerService(path = "/path/to/service/point")
class MyCustomAtmoHandler extends AtmosphereHandler with Logging with OtherStuff {
   override def onRequest {...}
   override def onStateChange {...}
   override def destroy {...}

注意:我用作指南的文档不包含注释参数“路径” - 我必须添加它才能使其编译。

编辑:这是使用 Jetty 版本 9.0.4.v20130625

4

1 回答 1

0

为了回答我自己的问题(以防其他流浪的鞋底发现自己处于相同的位置),我必须做两件事来解决问题:

1)删除 AtmosphereHandlerService 注释,或至少删除“路径”参数。(可能可以使用其余参数来操作注释;不确定。)

2) 将一个名为大气.xml 的文件添加到 META-INF 文件夹,其中包含如下内容:

<atmosphere-handlers>
    <atmosphere-handler support-session="false"
                    context-root="/websocket/path/to/processorA"
                    class-name="com.some.className">
    </atmosphere-handler>

    <atmosphere-handler support-session="true"
                    context-root="/websocket/optional/path/to/processorB"
                    class-name="com.some.other.className">
    </atmosphere-handler>
</atmosphere-handlers>

所以...... web.xml(或您的 servlet 容器使用的任何部署文件/架构)为所有处理程序创建“整体”上下文路径,而特定路由使用大气.xml 标记绑定到每个单独的处理程序。(类似“/websocket/*”的东西应该允许路由到这两个假设的处理程序。

从技术角度来看,可能有更好的方法来说明这个解决方案,但希望外行的总结能为您指明正确的方向。

于 2013-07-31T01:57:46.777 回答