2013-07-19 6 views
-1
내가 크롬을 사용

, 항상 반환 :spring + cometd가 webscoket을 지원하도록하려면 어떻게해야합니까?

WebSocket connection to 'ws://192.168.1.228:9090/achat/cometd' failed: Unexpected response code: 400 

을이 오류 후에는 서버에 연결하는 긴 폴링 전송, 성공을 사용합니다.

WebSocket을 작동 시키려면 어떻게해야합니까? SpringFramework 3.1 사용으로 인해 발생합니까? 감사.

의 Web.xml

<!-- Filter to support cross domain requests --> 
<filter> 
    <filter-name>cross-origin</filter-name> 
    <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> 
    <!--async-supported>true</async-supported--> 
</filter> 
<filter-mapping> 
    <filter-name>cross-origin</filter-name> 
    <url-pattern>/cometd/*</url-pattern> 
</filter-mapping> 
<!-- Cometd Servlet --> 
<servlet> 
    <servlet-name>cometd</servlet-name> 
    <servlet-class>org.cometd.annotation.AnnotationCometdServlet</servlet-class> 
    <!--async-supported>true</async-supported--> 
    <init-param> 
     <param-name>timeout</param-name> 
     <param-value>20000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>interval</param-name> 
     <param-value>0</param-value> 
    </init-param> 
    <init-param> 
     <param-name>maxInterval</param-name> 
     <param-value>10000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>maxLazyTimeout</param-name> 
     <param-value>5000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>long-polling.multiSessionInterval</param-name> 
     <param-value>2000</param-value> 
    </init-param> 
    <init-param> 
     <param-name>logLevel</param-name> 
     <param-value>100</param-value> 
    </init-param> 
    <init-param> 
     <param-name>transports</param-name> 
     <param-value>org.cometd.websocket.server.WebSocketTransport</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>cometd</servlet-name> 
    <url-pattern>/cometd/*</url-pattern> 
</servlet-mapping> 

서블릿

@Named 
@Singleton 
@Service 
public class ChatService { 
    @Inject 
    private BayeuxServer bayeux; 
    @Session 
    private ServerSession serverSession; 

    @Listener("/chat") 
    public void processHello(ServerSession remote, ServerMessage.Mutable message) 
    { 
     Map<String, Object> input = message.getDataAsMap(); 
     String room = input.get("room").toString(); 
     String content = input.get("content").toString(); 

     Map<String, Object> output = input;   
     bayeux.getChannel("/room/" + room).publish(remote, output, null); 
    } 
} 

답변

0

CometD Reference Manual에 따라, CometD with Spring을 통합하는 방법을 설명합니다 특히 섹션을 참조하십시오.

여기에는 Spring의 XML 구성을 사용하여 WebSocket을 설정하는 예제와 주석을 통해 Spring을 구성하는 방법의 예제가 나와 있습니다.

귀하의 질문에 스프링 구성 파일과 web.xml 파일의 일부가 부족하기 때문에보다 자세한 방법으로 당신을 도울 수 없습니다.

스프링에서 CometD를 구성하는 경우 모든 CometD 구성을 web.xml에서 제거해야한다는 점을 기억하십시오. 여러분이 구성하는 곳은 하나만 있어야합니다. web.xml 또는 Spring의 XML/annotations 중 하나만 있어야합니다.