Mon erreur apparaît dans la console de mon navigateur:
"WebSocket connection to 'ws://localhost:32768/DspClusterWebServices/myHandler' failed: Unexpected response code: 200"
J'utilise Spring Websockets 4.1.5
et Tomcat 8.0.18
. Ma classe d'implémentation WebSocketConfigurer se présente comme suit:
@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();
}
}
Mon testWebsocketClient.js essaie de se connecter avec ce code, mais a un code d'erreur de 200:
websocket = new WebSocket("ws://localhost:8080/myApp/myHandler");
Je ne peux pas trouver quoi essayer ensuite. Je pensais que cela provoquerait le déclenchement de la méthode afterConnectionEstablished (WebSocketSession session)? Le code 200 n'est-il pas bon?
S'il vous plaît vérifier http://procbits.com/connecting-to-a-sockjs-server-from-native-html5-websocket !
Après avoir ajouté /websocket
(À votre URL), cela vous donnera l’erreur
Échec de l'analyse de la valeur de l'en-tête Origin [null]
;), qui vous mènera ensuite à ce lien .
Vous devrez ajouter .setAllowedOrigins("*")
à votre méthode addHandler()
, et cela pourrait enfin fonctionner!
Regardez le spécification . Le serveur doit répondre avec 101
pour signaler le changement de protocole de http
à ws
.
Comme mon autre réponse: [ https://stackoverflow.com/a/53272666/2930417] [1]
J'utilise springboot 2 + STOMP
remove .withSockJS()
, alors tout va bien.
Je ne connais pas la raison, mais travaille pour moi.
Je ne sais pas si c'est trop tard, mais une solution sur laquelle je suis tombé est simplement d'ajouter la chaîne /websocket
après le noeud final Websocket que vous avez déclaré dans le serveur de démarrage Spring. Cela vous aidera à conserver la logique de transfert, à vous connecter et à établir une connexion Websocket.
Vérifiez que si 'ws: // localhost: 32768/DspClusterWebServices/myHandler' est correct.
Pour les gars comme moi qui utilisent angular + springboot et obtenu cette erreur. Veuillez vérifier si vous avez activé la redirection ou transférer toute demande de point de terminaison non api à index.html. Comme:
@RequestMapping(value = "/**/{[path:[^\\.]*}")
public String redirect() {
// Forward to home page so that route is preserved.
return "forward:/index.html";
}
Si vous le faites, désactivez-le et vous obtiendrez 101