Ich habe Websocket im Frühjahr implementiert, aber der JavaScript-Client kann keine Verbindung zum Websocket herstellen. HierJavaScript-Client kann keine Verbindung zu Spring 4 herstellen WebSocket
ist die WebSocketConfig Klasse:
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);
}
}
Hier ist die test.html
Seite, die mit dem websocket versucht, eine Verbindung:
<!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>
ich den websocket Pfad initialisiert bei /endpoint
zu sein. Dies wird durch meine Server-Logs, die sagen, dass dies geschehen ist:
[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]
Wenn ich test.html
öffnen, die Verbindung öffnet und sofort trennt. Die Funktionen processOpen(message)
und processClose(message)
werden sofort nacheinander aufgerufen. Was mache ich falsch und wie kann ich das beheben?
Das hat nicht funktioniert. Ich habe einen Fehler (etwas, das besagt, dass eine Bean erforderlich war) in der WebSocketConfig – user5139637
erhalten. Können Sie bitte die genaue Fehlermeldung und Ihre aktualisierten Klassen anzeigen? Der Code, den ich gepostet habe, funktioniert gut für mich. – abaghel
kann und kann ich definitiv. Aber nach dem Stellen dieser Frage wurde mir klar, dass meine Frage zu Web Sockets etwas anders ist. Ich machte einen anderen SO Post: http://stackoverflow.com/questions/39683062/enable-cors-for-websockets-in-spring Wenn Sie dabei helfen könnten, wäre es fantastisch. Ich danke dir sehr – user5139637