java - net - Obtengo un estado 200 cuando me conecto al websocket, pero es un error
websocket connection error during websocket handshake (6)
Mi error aparece en la consola de mi navegador:
"WebSocket connection to ''ws://localhost:32768/DspClusterWebServices/myHandler'' failed: Unexpected response code: 200"
Estoy usando Spring Websockets 4.1.5
y Tomcat 8.0.18
. Mi clase de implementación WebSocketConfigurer se ve así:
@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();
}
}
Mi testWebsocketClient.js intenta conectarse con este código, pero tiene un código de error de 200:
websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
No puedo averiguar qué intentar a continuación. ¿Pensé que esto provocaría que se activara el método afterConnectionEstablished (sesión de WebSocketSession)? ¿No es bueno el código 200?
Como mi otra respuesta: [ https://.com/a/53272666/2930417][1] [ https://.com/a/53272666/2930417][1]
Yo uso springboot 2 + STOMP。
eliminar .withSockJS()
, entonces todo está bien.
No sé la razón, pero funciona para mí.
Compruebe que si ''ws: // localhost: 32768 / DspClusterWebServices / myHandler'' es correcto.
Echa un vistazo a la specification . El servidor debe responder con 101
para indicar el cambio de protocolo de http
a ws
.
No sé si esto es demasiado tarde, pero una solución con la que me topé es simplemente agregar la cadena /websocket
después del punto final de websocket que declaró en el servidor de arranque Spring. Esto ayudará a mantener tanto la lógica de reenvío como a conectar y establecer una conexión websocket.
Para aquellos tipos como yo que usan angular + springboot y obtuvieron este error. compruebe si ha habilitado la redirección o reenvío todas las solicitudes de puntos finales que no sean API a index.html. me gusta:
@RequestMapping(value = "/**/{[path:[^//.]*}")
public String redirect() {
// Forward to home page so that route is preserved.
return "forward:/index.html";
}
Si lo haces, desactívalo y obtendrás 101.
Por favor, consulte this !
Después de agregar /websocket
(a su URL), le dará el error
Error al analizar el valor del encabezado de origen [nulo]
;), que a su vez lo llevará a github.com/spring-projects/spring-boot/issues/2586 .
Tendrá que agregar .setAllowedOrigins("*")
a su método addHandler()
, ¡y finalmente podría funcionar!