连接到websocket时我得到状态200,但这是一个错误?

smu*_*kes 30 javascript java tomcat websocket spring-websocket

我的错误显示在浏览器的控制台中:

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

我正在使用Spring Websockets 4.1.5Tomcat 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();
   }
}
Run Code Online (Sandbox Code Playgroud)

我的testWebsocketClient.js尝试连接此代码,但错误代码为200:

websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚下一步该尝试什么.我以为这会导致afterConnectionEstablished(WebSocketSession会话)方法被触发?代码200不好吗?

xer*_*593 34

请查看http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket!

追加/websocket(到您的URL)后,它会给您错误

无法解析Origin标头值[null]

;),然后将引导您到那个链接.

你必须添加.setAllowedOrigins("*")到你的addHandler()方法,然后它可以最终工作!

  • 就像一个附加组件一样,如果从服务器上删除.withSockJs()调用而从客户端代码中删除/ websocket,它也会以这种方式工作!棘手的东西,希望这有助于未来的人们!再次感谢xerx593帮助我找到解决方案! (11认同)

Han*_*nes 9

看看规格.服务器应响应101信号协议从更改httpws.


小智 7

作为我的另一个答案:[ /sf/answers/3729086651/] [1 ]

我使用springboot 2 + STOMP.

删除.withSockJS(),然后一切都好.

我不知道原因,但对我有用.


小智 5

不知道这是否为时已晚,但我偶然发现的一个解决方案是简单地将字符串附加/websocket在您在 Spring Boot 服务器中声明的 websocket 端点之后。这将有助于保留转发逻辑并连接并建立 Websocket 连接。