春にwebsocketを実装しましたが、JavaScriptクライアントはwebsocketに接続できません。ここでJavaScriptクライアントがSpring 4 WebSocketに接続できません
はWebSocketConfigクラスである:ここで
package com.myapp.spring.security.config;
import com.myapp.spring.web.controller.MyWebSocketHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
//import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
//import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.PerConnectionWebSocketHandler;
@Configuration
@EnableWebMvc
@EnableWebSocket
@ComponentScan(basePackages={"com.myapp.spring.*"})
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry
.addHandler(myWebSocketHandler(), "/endpoint")
.setAllowedOrigins("*");
}
@Bean
public WebSocketHandler myWebSocketHandler() {
return new PerConnectionWebSocketHandler(MyWebSocketHandler.class);
}
}
はWebSocketのに接続しようとtest.html
ページは次のとおりです。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<body>
<p>Going to connect to the WebSocket at /endpoint. Check Console</p>
<button onclick="ss()">Send</button>
</body>
<script type="text/javascript">
var webSocket = new WebSocket("wss://"+document.location.hostname+":8443"+"/endpoint");
webSocket.onopen = function(message) {
processOpen(message);
};
webSocket.onmessage = function(message) {
processMessage(message);
};
webSocket.onclose = function(message) {
processClose(message);
};
webSocket.onerror = function(message) {
processError(message);
};
function processOpen(message) {
console.log("JS: Server Connected... "+message);
}
function processMessage(message) {
console.log("Getting a mess: "+message);
}
function processClose(message) {
console.log("JS: Client disconnected... "+message);
}
function processError(message) { //
console.log("Error occured: "+message);
}
function ss() {
webSocket.send("test");
}
</script>
</html>
私は/endpoint
にあるとのWebSocketパスを初期化します。これは、これが発生したことを言う私のサーバーのログによって明らかである:私はtest.html
を開くとき
[org.springframework.web.socket.server.support.WebSocketHandlerMapping] (ServerService Thread Pool -- 75) Mapped URL path [/endpoint] onto handler of type [class org.springframework.web.socket.server.support.WebSocketHttpRequestHandler]
、接続が開き、すぐに切断されます。 processOpen(message)
とprocessClose(message)
の機能はすぐに1つずつ呼び出されます。だから私は間違って何をしているのですか?これをどのように修正できますか?
これはうまくいきませんでした。 WebSocketConfigでエラー(Beanが必要だと言ったもの)を受け取りました – user5139637
正確なエラーメッセージと更新されたクラスを表示できますか?私が投稿したコードはうまく動作しています。 – abaghel
私は間違いなくそうすることができます。しかし、私はこの質問を投稿した後、Webソケットに関する私の質問はわずかに異なることに気付きました。私は別のSOのポストを作った:http://stackoverflow.com/questions/39683062/enable-cors-for-websockets-in-springあなたがそれを助けることができれば、それはすばらしいだろう。どうもありがとうございます – user5139637