简体   繁体   English

在tomcat中使用cometD的Oort

[英]Using cometD's Oort with tomcat

We are using cometD with Tomcat 7.0.42 (which is a must). 我们在Tomcat 7.0.42中使用了cometD(这是必须的)。 We now try to get Oort (the clustering mechanism of cometD) working. 现在,我们尝试使Oort(cometD的群集机制)起作用。 If I enabled Oort in the web.xml like this, each time another node tries to connect the exception below occures. 如果像这样在web.xml中启用了Oort,则每次其他节点尝试连接时都会发生以下异常。

I am well aware that cometD currently can't use Websockets with Tomcat which is why I would esxpect cometD to simply fall back to longpolling... 我很清楚,CometD当前不能与Tomcat一起使用Websockets,这就是为什么我认为CometD只是回到longpolling的原因。

This is my config: 这是我的配置:

  <web-app xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">
<display-name>messenger</display-name>

<servlet>
    <servlet-name>cometd</servlet-name>
    <servlet-class>org.cometd.server.CometdServlet</servlet-class>
    <init-param>
        <param-name>allowedTransports</param-name>
        <param-value>LongPollingTransport</param-value>
    </init-param>
    <init-param>
        <param-name>timeout</param-name>
        <param-value>20000</param-value>
    </init-param>


    <init-param>
        <param-name>jsonContext</param-name>
        <param-value>org.cometd.server.JacksonJSONContextServer</param-value>
    </init-param>
    <init-param>
        <param-name>maxInterval</param-name>
        <param-value>10000</param-value>
    </init-param>

    <init-param>
        <param-name>long-polling.multiSessionInterval</param-name>
        <param-value>2000</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

<servlet-mapping>
    <servlet-name>cometd</servlet-name>
    <url-pattern>/cometd/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Oort</servlet-name>
    <servlet-class>org.cometd.oort.OortStaticConfigServlet</servlet-class>
    <init-param>
        <param-name>oort.url</param-name>
        <param-value>http://192.168.178.37:8080/messenger/cometd</param-value>
    </init-param>
    <init-param>
        <param-name>oort.channels</param-name>
        <param-value>/messenger/**,/internal/**</param-value>
    </init-param>
    <init-param>
        <param-name>oort.cloud</param-name>
        <param-value>http://192.168.178.22:8080/messenger/cometd</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

<servlet>
    <servlet-name>Seti</servlet-name>
    <servlet-class>org.cometd.oort.SetiServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
    <async-supported>true</async-supported>
</servlet>

And this is the exception: 这是一个例外:

org.cometd.common.TransportException: {httpCode=400, websocketCode=1002}
at org.cometd.websocket.client.WebSocketTransport.connect(WebSocketTransport.java:287) ~[cometd-websocket-jetty-2.7.0.jar:na]
at org.cometd.websocket.client.WebSocketTransport.send(WebSocketTransport.java:194) ~[cometd-websocket-jetty-2.7.0.jar:na]
at org.cometd.client.BayeuxClient$BayeuxClientState.send(BayeuxClient.java:1390) ~[cometd-java-client-2.7.0.jar:na]
at org.cometd.client.BayeuxClient.sendHandshake(BayeuxClient.java:374) ~[cometd-java-client-2.7.0.jar:na]
at org.cometd.client.BayeuxClient$HandshakingState.execute(BayeuxClient.java:1496) ~[cometd-java-client-2.7.0.jar:na]
at org.cometd.client.BayeuxClient.updateBayeuxClientState(BayeuxClient.java:1062) ~[cometd-java-client-2.7.0.jar:na]
at org.cometd.client.BayeuxClient.handshake(BayeuxClient.java:315) ~[cometd-java-client-2.7.0.jar:na]
at org.cometd.oort.Oort.connectComet(Oort.java:411) ~[cometd-java-oort-2.7.0.jar:na]
at org.cometd.oort.Oort.observeComet(Oort.java:358) ~[cometd-java-oort-2.7.0.jar:na]
at org.cometd.oort.Oort.observeComet(Oort.java:306) ~[cometd-java-oort-2.7.0.jar:na]
at org.cometd.oort.OortMulticastConfigurer.receive(OortMulticastConfigurer.java:125) ~[cometd-java-oort-2.7.0.jar:na]
at org.cometd.oort.OortMulticastConfigurer$MulticastReceiver.run(OortMulticastConfigurer.java:154) ~[cometd-java-oort-2.7.0.jar:na]
at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]

Caused by: java.net.ProtocolException: Bad response status 400 Bad Request
at org.eclipse.jetty.websocket.WebSocketClientFactory$HandshakeConnection.onClose(WebSocketClientFactory.java:546) ~[jetty-websocket-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.websocket.WebSocketClientFactory$WebSocketClientSelector.endPointClosed(WebSocketClientFactory.java:326) ~[jetty-websocket-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.destroyEndPoint(SelectorManager.java:848) ~[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.doUpdateKey(SelectChannelEndPoint.java:601) ~[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.doSelect(SelectorManager.java:463) ~[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.io.nio.SelectorManager$1.run(SelectorManager.java:285) ~[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) ~[jetty-util-8.1.5.v20120716.jar:8.1.5.v20120716]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) ~[jetty-util-8.1.5.v20120716.jar:8.1.5.v20120716]
... 1 common frames omitted

The error you see reports webSocketCode=1002 , and the code that does that disables the WebSocket transport, so fallback to long polling should work flawlessly. 您看到的错误报告webSocketCode=1002 ,并且该代码禁用了WebSocket传输,因此回webSocketCode=1002长时间轮询应该可以正常工作。

The CometD test suite has a test for exactly this scenario. CometD测试套件针对这种情况进行了测试。

因此,这仅是一条调试消息,而不一定是显示的“真实”异常?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM