2013-10-25 3 views
0

Tomcat 7.0.42에서 cometD를 사용하고 있습니다. 우리는 이제 Oort (cometD의 클러스터링 메커니즘)를 작동 시키려고합니다. 이처럼 web.xml에서 Oort를 활성화하면 다른 노드가 예외를 연결하려고 시도 할 때마다 발생합니다.cometD의 Oort with tomcat 사용하기

<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> 
:

나는

내 설정입니다 ... cometD 현재 단순히 다시 longpolling에 떨어 cometD을 esxpect 이유입니다 톰캣과 WebSocket을 사용할 수 없습니다 것을 잘 알고

그리고 이것은 예외 :

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 

답변

0

보고되는 오류 webSocketCode=1002 및 해당 코드로 인해 WebSocket 전송이 비활성화되므로 긴 폴링으로 폴백해야하므로 완벽하게 작동합니다.

CometD 테스트 스위트에는이 시나리오에 대한 테스트가 있습니다.

+0

우리가 보는 것은 다음과 같습니다. Oort는 Websocket이 작동하지 않는 것을 알아 채기 전까지 2 번 다른 노드에 연결을 시도합니다. 그런 다음 처음 폴트하는 긴 폴링으로 폴백합니다. 그 후에는 연결을 설정할 수있는 것처럼 보이지만 보낼 메시지는 다른 노드로 전달되지 않습니다. 나는 지금까지 제공 한 정보로이 문제에 대한 답을 얻을 수 없다고 생각하지만, 문제가되는대로 발견하자마자 여기에 게시하겠습니다. – Christian

-1

이것은 단지 디버그 메시지 일 뿐이며 반드시 "실제"예외가 표시되는 것은 아닙니다.

+1

이것은 답변이 아닙니다. – LuigiEdlCarno