javascript - 带有 Spring Boot 和 JavaScript 的 WebSocket

标签 javascript java reactjs spring-boot websocket

这是我在 JavaScript 客户端和 Java 服务器之间创建 WebSocket channel 的简单尝试。

// 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 connection to 'ws://localhost:8080/websocket' failed: Error during WebSocket handshake: Unexpected response code: 200

我看了很多其他帖子,其中大部分都与允许来源有关。我尝试将原点设置为 localhost 以及本地 IP 地址,但没有成功。

我错过了什么?任何帮助都是巨大的。

编辑:客户端是使用 create-react-app 创建的,如果相关的话。

编辑: 客户端开启:http:localhost:3000,服务器开启:http:localhost:8080

最佳答案

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

关于javascript - 带有 Spring Boot 和 JavaScript 的 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49844836/

相关文章:

java - 两个人相同的代码,只有一个人出现NullPointerException?

java - 使用 Android 服务发送电子邮件

javascript - 什么时候在构造函数( Prop )上使用普通状态?

javascript - 在 ReactJS 中使用 jQuery 是一种不好的做法吗?

javascript - 从 React useEffect 自定义 Hook 提前返回不会被解构

javascript - 通过Ajax调整图片大小并上传

javascript - 如何将 Angular 5 应用程序嵌入到另一个页面的 HTML 中?

Canvas 的 JavaScript 内存问题

java - Spark java.lang.StackOverflowError

javascript - react Hook 。单击时如何使其他项目(当前项目除外)停用