thu*_*mon 4 java websocket spring-boot spring-websocket
我正在使用 Java Spring WebSocket 创建一个 WebSocket 服务器,如果从同一服务器创建 WebSocket 客户端,它实际上可以工作。
这是我的服务器端代码,非常简单
// WebSocketConfig.java
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
SocketTextHandler socketTextHandler;
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(socketTextHandler, "/sockets");
}
}
Run Code Online (Sandbox Code Playgroud)
// SocketTextHandler.java
@Component
public class SocketTextHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message)
throws InterruptedException, IOException {
String payload = message.getPayload();
System.out.println("16: " + session.getId());
session.sendMessage(new TextMessage("Resp: " + payload));
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) {
System.out.println("Server transport error: " + exception.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将以下WebSocket客户端放入Spring boot静态index.html中
<html>
<body>
Hello
<script>
console.log('start');
const ws = new WebSocket('ws://localhost:8080/sockets');
ws.onopen = function(evt) {
console.log('onopen', evt);
}
ws.onerror = function(evt) {
console.log('onerror', evt);
}
console.log('done');
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后我访问http://localhost:8080/index.html,没有错误,可以看到console.log('onopen', evt)日志。
但是,我的WebSocket客户端应该运行在不同的端口上http://localhost:3000,我使用相同的index.html,但是当我访问时,控制台中http://localhost:3000/index.html总是出现此错误WebSocket connection to 'ws://localhost:8080/sockets' failed
我想知道 WebSocket 是否需要从同一服务器连接?或者我错过了什么。
谢谢!
对于也遇到此问题的任何人,registry.addHandler(socketTextHandler, "/sockets").setAllowedOrigins("*");将解决该问题
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |