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

时间:2015-04-23 16:40:51

标签: java javascript tomcat websocket spring-websocket

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

{ name: "my_serie", columns: ["time", "value1", "value2"], points: [ [1429807111, 1, 2], [1429807111, 11, 22], [1429807111, 111, 222] ] }

我正在使用"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"Spring Websockets 4.1.5。我的WebSocketConfigurer实现类如下所示:

Tomcat 8.0.18

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

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

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

6 个答案:

答案 0 :(得分:31)

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

/websocket追加到您的网址后,它会给您错误

  

无法解析Origin标头值[null]

) 然后,它将引导您that link

您必须在.setAllowedOrigins("*")方法中添加addHandler(),然后才能最终运作!

答案 1 :(得分:7)

查看specification 。服务器应以101回复,以表示从httpws的协议更改。

答案 2 :(得分:6)

我的另一个答案是:[https://stackoverflow.com/a/53272666/2930417][1]

我使用springboot 2 + STOMP。

删除.withSockJS(),然后一切正常。

我不知道原因,但是对我有用。

答案 3 :(得分:2)

请检查'ws:// localhost:32768 / DspClusterWebServices / myHandler'是否正确。

答案 4 :(得分:2)

对于像我这样使用angular + springboot并且出现此错误的人。请检查您是否已启用重定向或将所有非api端点请求转发回index.html。像:

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

如果你这样做,请禁用它,你将获得101

答案 5 :(得分:2)

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