Java 弹簧websocket无法建立连接
无法通过浏览器客户端建立与我的websocket服务器的连接 配置:Java 弹簧websocket无法建立连接,java,spring-websocket,Java,Spring Websocket,无法通过浏览器客户端建立与我的websocket服务器的连接 配置: @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.e
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic/", "/queue/");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/greeting");
}
}
和控制器:
@MessageMapping("/message")
@SendToUser("/queue/reply")
public String processMessageFromClient(@Payload String message, Principal principal) throws Exception {
String name = new Gson().fromJson(message, Map.class).get("name").toString();
System.out.println(name);
//messagingTemplate.convertAndSendToUser(principal.getName(), "/queue/reply", name);
return name;
}
我启动服务器,然后在浏览器中打开index.html,然后连接到ws://localhost:8080/greeting
然后将消息发送到/app/message
但实际上什么也没发生。浏览器检查器显示404。我在做什么?以下是在Spring中实现WebSocket的方法。首先,您应该配置WebSocket消息代理并注册stomp端点,如下所示。在这里,我使用setAllowedOriginates(“*”).withSockJS()访问任何主机的端点
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/greeting")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app")
.enableSimpleBroker("/topic", "/queue/");
}
}
然后,我创建控制器,如下所示
@Controller
public class WebSocketController {
private final SimpMessagingTemplate template;
@Autowired
WebSocketController(SimpMessagingTemplate template){
this.template = template;
}
@MessageMapping("/queue/reply")
public void sendMessage(String message){
System.out.println(message);
this.template.convertAndSend("/topic", message);
}
}
如上所述,使用@MessageMapping(“/queue/reply”)代替@SendToUser(“/queue/reply”)
在这个简单的消息传递模板中,我使用convertAndSend()方法
与该消息代理的异步数据通信。如果有
任何数据到达消息代理,它将自动发送该数据
使用上面配置的端点/socket和SockJS的数据
然后跺脚
您可以参考这篇文章来了解有关SpringWebSocket的更多信息。使用@MessageMapping(“/queue/reply”)代替上面的@SendToUser(“/queue/reply”),如下所示。这不起作用。还通过测试,操作系统是否会以某种方式阻止ws?