这是我尝试创建JavaScript客户端和Java服务器之间WebSocket通道的简单方法。
// java websocket server configuration with spring boot
// server port: 8080 set in the "application.yml"
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websocket")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app")
.enableSimpleBroker("/notification");
}
}
// js websocket client configuration with "webstomp-client"
import webstomp from 'webstomp-client';
const connection = new WebSocket('ws://localhost:8080/websocket');
const stompClient = webstomp.over(connection);
stompClient.connect(()=>{
stompClient.subscribe('/app/notification', () => console.log('Connection established with server'));
});
控制台显示以下内容:
WebSocket连接到“ws://localhost:8080/websocket”失败:在WebSocket握手期间出错:意外的响应代码:200
我查看了很多其他帖子,大部分与允许来源有关。 我尝试将来源设置为 localhost
以及本地IP地址,但没有成功。
我漏掉了什么?任何帮助都将是非常宝贵的。
编辑:客户端使用create-react-app
创建,如果相关的话。
编辑:客户端位于:http:localhost:3000
,服务器位于:http:localhost:8080
。
app/notification
路由的呢? - edkevekedapp/notification
订阅的用户返回了一些内容? - edkevekedlocalhost:4200
,而将服务器服务于localhost:8080
。 最后一件事我想提到的是,也许可以删除.setAllowedOrigins("*")
并在应用程序的全局级别设置CORS。 - edkeveked