繁体   English   中英

带有 Spring Boot 和 JavaScript 的 WebSocket

[英]WebSocket with Spring Boot and JavaScript

这是我在 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

您正在服务器端使用 SockJS 配置端点,但您没有在客户端使用 SockJS。 这就是为什么您得到 200 状态代码而不是 101 的原因。在客户端使用 SockJS(而不是原始 WebSocket)或在服务器端删除withSockJS()

console.log("IDK") // idk to be honest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM