2015-04-23 2 views
19

Mein Fehler zeigt in der Konsole von meinem Browser auf:Ich bekomme einen Status 200 beim Verbinden mit dem Websocket, aber es ist ein Fehler?

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

I Spring Websockets 4.1.5 und Tomcat 8.0.18 verwenden. Meine WebSocketConfigurer Implementierungsklasse wie folgt aussieht:

@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(); 
    } 
} 

Mein testWebsocketClient.js versucht mit diesem Code zu verbinden, hat aber einen Fehlercode von 200:

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

ich nicht herausfinden kann, was als nächstes zu versuchen. Ich dachte, dies würde dazu führen, dass die Methode afterConnectionEstablished (WebSocketSession-Sitzung) ausgelöst wird? Ist Code 200 nicht gut?

+1

einen Blick bekommen, PLZ http://stackoverflow.com/a/14555549/592355 insbesondere: „Was Ihre "Unerwarteter Antwortcode: 200" -Fehler, ich vermute, dass die WebSocket-URL, die Sie auf der Clientseite verwenden, nicht auf ein gültiges serverseitiges Skript verweist, aber das ist ohne weitere Informationen schwer zu kommentieren. " – xerx593

+0

Welche Informationen werden benötigt? Ich benutze Tomcat 8.0.18 und ich kann die websocket-api.jar und tomcat-websocket.jar im lib-Ordner der Tomcat-Installation sehen ... – smuggledPancakes

+0

Wie wäre es mit der Controller-Annotation? (Es ist nicht in WebSocket Proben) ... denkst du nicht, dass das stören könnte? – xerx593

Antwort

19

Bitte überprüfen Sie http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!

Nachdem Sie /websocket (zu Ihrer URL) anhängen, wird es geben Sie den Fehler

fehlgeschlagen Origin-Header-Wert [null]

zu analysieren;) , die dann wiederum führen Sie zu that link.

Sie müssen .setAllowedOrigins("*") zu Ihrer addHandler() Methode hinzufügen, und dann könnte es endlich funktionieren!

+6

Wie ein Add-on, wenn Sie den .withSockJs() -Aufruf vom Server und den/websocket vom Client-Code entfernen, wird es auch so funktionieren! Tricky Zeug, hoffentlich hilft das den Menschen in der Zukunft! Nochmals vielen Dank xerx593 für die Hilfe bei der Suche nach einer Lösung! – smuggledPancakes

7

Werfen Sie einen Blick auf die specification. Der Server sollte mit 101 antworten, um eine Protokolländerung von http zu ws zu signalisieren.

+0

Ich bin immer noch nicht sicher, was zu tun ist, gibt dieser Link eine weitere Erklärung des Status 200 Code: http://StackOverflow.com/Questions/18190644/Was-tut-websocket-upgrade-request-failed-exception-gemein-in-context-of-web Etwas muss auf der Server-Seite falsch sein, aber ich bin mir nicht sicher, wie ich Tomcat 8.0 verwende. 18 – smuggledPancakes

2

Überprüfen Sie, ob 'ws: // localhost: 32768/DspClusterWebServices/myHandler' korrekt ist.

0

Für diejenigen wie mich, die angular + Springboot verwenden und diesen Fehler erhalten haben. Bitte prüfen Sie, ob Sie die Weiterleitung aktiviert haben oder leiten Sie alle Nicht-API-Endpunkt-Anfragen zurück an index.html. wie:

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

Wenn Sie das tun, deaktivieren Sie es und Sie werden diese 101

Verwandte Themen