webentwicklung-frage-antwort-db.com.de

Ich erhalte den Status 200, wenn ich mich mit dem Websocket verbinde, aber es ist ein Fehler?

Mein Fehler wird in der Konsole meines Browsers angezeigt:

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

Ich benutze Spring Websockets 4.1.5 und Tomcat 8.0.18. Meine WebSocketConfigurer-Implementierungsklasse sieht folgendermaßen aus:

@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, eine Verbindung mit diesem Code herzustellen, hat jedoch den Fehlercode 200:

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

Ich kann nicht herausfinden, was ich als nächstes versuchen soll. Ich dachte, dass dies die Methode afterConnectionEstablished (WebSocketSession-Sitzung) auslösen würde? Ist Code 200 nicht gut?

30

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

Nachdem Sie /websocket (An Ihre URL) angehängt haben, wird der Fehler angezeigt

Fehler beim Parsen des Origin-Header-Werts [null]

;), was Sie dann wiederum zu diesem Link führt.

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

31
xerx593

Schauen Sie sich die Spezifikation an. Der Server sollte mit 101 Antworten, um einen Protokollwechsel von http nach ws anzuzeigen.

8
Hannes

Als meine andere Antwort: [ https://stackoverflow.com/a/53272666/2930417] [1]

Ich benutze Springboot 2 + STOMP。

entferne .withSockJS(), dann ist alles in Ordnung.

Ich kenne den Grund nicht, arbeite aber für mich.

6
hatanooh

Ich weiß nicht, ob dies zu spät ist, aber eine Lösung, auf die ich gestoßen bin, besteht darin, einfach den String /websocket nach dem Websocket-Endpunkt, den Sie im Spring-Boot-Server deklariert haben. Dies hilft, die Weiterleitungslogik beizubehalten und eine Websocket-Verbindung herzustellen.

2
Henry

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

2
Yang Peiyong

Für Leute wie mich, die angular + springboot verwenden und diesen Fehler haben. Bitte überprüfen Sie, ob Sie die Umleitung aktiviert haben, oder leiten Sie alle Nicht-API-Endpunktanforderungen zurück an index.html.

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

Wenn Sie dies tun, deaktivieren Sie es und Sie erhalten 101

2
Shuai Wang