web-dev-qa-db-ja.com

WebSocketに接続するとステータス200が表示されますが、エラーですか?

ブラウザのコンソールにエラーが表示されます:

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

私は使っている Spring Websockets 4.1.5およびTomcat 8.0.18。私のWebSocketConfigurer実装クラスは次のようになります。

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

私のtestWebsocketClient.jsはこのコードで接続しようとしますが、エラーコードは200です。

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

次に何を試すべきかわかりません。これにより、afterConnectionEstablished(WebSocketSession session)メソッドが起動すると考えられましたか?コード200は適切ではありませんか?

30

http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket を確認してください!

_/websocket_を(URLに)追加すると、エラーが表示されます

Originヘッダー値の解析に失敗しました[null]

;)、それから そのリンク につながります。

.setAllowedOrigins("*")メソッドにaddHandler()を追加する必要があります。そうすれば、最終的には機能します!

31
xerx593

specification をご覧ください。サーバーは101で応答して、プロトコルがhttpからwsに変更されたことを通知する必要があります。

8
Hannes

私の別の答えとして:[ https://stackoverflow.com/a/53272666/2930417] [1]

Springboot 2 + STOMPを使用します。

.withSockJS()を削除すると、すべて問題ありません。

理由はわかりませんが、うまくいきます。

6
hatanooh

これが遅すぎるかどうかはわかりませんが、私がつまずいた解決策は、スプリングブートサーバーで宣言したwebsocketエンドポイントの後に単に文字列/websocketを追加することです。これにより、転送ロジックを保持し、接続してWebSocket接続を確立できます。

2
Henry

「ws:// localhost:32768/DspClusterWebServices/myHandler」が正しいかどうかを確認してください。

2
Yang Peiyong

angular + springbootを使用してこのエラーが発生した私のような人々のために、リダイレクトを有効にしているかどうかを確認してください。

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

無効にすると、101が表示されます

2
Shuai Wang