2015-04-23 11 views
19

mio errore si presenta nella console del mio browser:Ricevo uno stato 200 quando mi collego al websocket, ma si tratta di un errore?

"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"

Sto usando Spring Websockets 4.1.5 e Tomcat 8.0.18. La mia classe di implementazione WebSocketConfigurer assomiglia:

@Configuration 
@Controller 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer 
{ 
    class MyHandler implements WebSocketHandler 
    { 
     @Override 
     public void afterConnectionEstablished(WebSocketSession session) throws Exception 
     { 
     System.out.println("afterConntectionEstablished called"); 
     } 

     ...implements rest of functions with a System.out.println and false for supportsPartialMessages() 

     } 
    } 

    @Override registerWebSocketHandlers(WebSocketHandlerRegistry registry) 
    { 
     registry.addHandler(myHandler(), "myHandler").withSockJS(); 
    } 

    @Bean 
    public WebSocketHandler myHandler() 
    { 
     return new MyHandler(); 
    } 
} 

miei testWebsocketClient.js tenta di connettersi con questo codice, ma ha un codice di errore di 200:

websocket = new WebSocket("ws://localhost:8080/myApp/myHandler"); 

io non riesco a capire che cosa da provare dopo. Ho pensato che questo avrebbe causato l'attivazione del metodo afterConnectionEstablished (WebSocketSession)? Il codice 200 non è buono?

+1

un'occhiata a questo, plz http://stackoverflow.com/a/14555549/592355 in particolare: "Per quanto riguarda la tua Errore "codice di risposta inatteso: 200", suppongo che l'URL WebSocket che stai utilizzando sul lato client non stia puntando a uno script lato server valido, ma è difficile commentare senza ulteriori informazioni. " – xerx593

+0

Quali informazioni sono necessarie? Sto usando Tomcat 8.0.18 e posso vedere websocket-api.jar e tomcat-websocket.jar nella cartella lib dell'installazione di Tomcat ... – smuggledPancakes

+0

E l'annotazione del controller? (Non è in campioni WebSocket) ... non pensi che possa interferire? – xerx593

risposta

19

Si prega di verificare http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!

Dopo aver aggiunto /websocket (al tuo URL), che vi darà l'errore

Impossibile analizzare valore di intestazione Origine [null]

;) , che poi a sua volta ti portano a that link.

Dovrai aggiungere .setAllowedOrigins("*") al tuo metodo addHandler() e quindi potrebbe finalmente funzionare!

+6

Proprio come un componente aggiuntivo, se rimuovi la chiamata .withSockJs() dal server e/websocket dal codice client, funzionerà anche in questo modo! Roba ingannevole, speriamo che questo aiuti le persone in futuro! Grazie ancora xerx593 per avermi aiutato a trovare una soluzione! – smuggledPancakes

7

Dai uno sguardo allo specification. Il server deve rispondere con 101 per segnalare il cambio di protocollo da http a ws.

+0

Non sono ancora sicuro di cosa fare, questo link fornisce ulteriori spiegazioni del codice di stato 200: http://stackoverflow.com/questions/18190644/what-does-websocket-upgrade-request-failed-exception-mean-in-a-context-of-web Qualcosa deve essere sbagliato sul server, ma non so come, sto usando Tomcat 8.0. 18 – smuggledPancakes

2

Verificare che 'ws: // localhost: 32768/DspClusterWebServices/myHandler' sia corretto.

0

Per quei ragazzi come me che usano angular + springboot e hanno ricevuto questo errore. per favore controlla se hai abilitato il reindirizzamento o inoltra tutta la richiesta di endpoint non API a index.html. come:

@RequestMapping(value = "/**/{[path:[^\\.]*}") 
    public String redirect() { 
     // Forward to home page so that route is preserved. 
     return "forward:/index.html"; 
    } 

Se lo fai, disattivarlo e otterrete 101

Problemi correlati