2013-07-19 2 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> 

Servlet

@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 Spring для настройки WebSocket и пример настройки Spring через аннотации.

В вашем вопросе отсутствует файл конфигурации Spring и часть файла web.xml, поэтому вам будет сложно помочь вам более детально.

Просто помните, что если вы настроите CometD весной, вы должны удалить всю конфигурацию CometD с web.xml. У вас должно быть только одно место, где вы настраиваете вещи: либо web.xml, либо XML/аннотации Spring.