• WebSocket使用中Stomp Client连接报ERROR CODE 200的解决办法


    最近在做一个WebSocket项目,后台使用了Stomp协议的WebSocketConfigurer,但是前端在测试的时候,发现一个很奇怪的问题:

    本地的测试代码,最初我使用了Java+SockJS实现:

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer {
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/density")
                    .setAllowedOrigins("*") //解决跨域问题
                    .withSockJS();
        }
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
        }
    }
    var url = "http://172.18.171.167:8080/density"
    var socket = new SockJS(url)
    var stompClient = Stomp.over(socket)
    

    这种情况下自测可以通过

    但是前端反应,SockJS不支持同时打开多个Socket订阅(我也不清楚到底是否真实,懒得追究了),于是需要研究如何在前端通过原生WebSocket的方式而不是SockJS的方式建立客户端(BTW 我一直觉得这是前端的活儿,我也不明白我一个后端为什么要搞这个)

    按照网上的教程,写了如下的代码:

    var stompClient = Stomp.client('ws://172.18.171.167:8080/density');
    
            stompClient.connect({}, function (frame) {
                setConnected(true);
                console.log('Connected:' + frame);
                stompClient.subscribe('/topic/callback', function (response) {
                    showCallback(response.body);
                });
                
            });

    但是这时无论如何,前端都会报如下的错误:

    failed: Unexpected response code: 200 

    试了很多种方法,但是都没法儿解决问题,最终在Stack Overflow的一个回答下面的Comment里面找到答案:

    将原来的URL

    ws://172.18.171.167:8080/density/

    改为

    ws://172.18.171.167:8080/density/websocket

    生效!!!

    具体为什么,我也不知道。。。Orz

  • 相关阅读:
    软件错误,软件缺陷,软件故障与软件失效
    QEMU命令创建KVM Guest(bridge桥接)
    Linux下设置网卡随系统启动
    RHEL查看CPU等机器信息
    QEMU/KVM功能测试
    CentOS 删除自带的OpenJDK 和 安装SunJDK
    将Centos的yum源更换为国内的阿里云源
    Centos6.8下安装oracle_11gr2版主要过程
    Centos6.8下安装oracle_11gr2版主要过程
    opendrive.com提供的免费网盘
  • 原文地址:https://www.cnblogs.com/chrischeng/p/10237523.html
Copyright © 2020-2023  润新知