• 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

  • 相关阅读:
    《Linux shell编程中 diff与vimdif的使用》RHEL6
    《mysql数据库备份小脚本》
    《linux下sudo服务的使用》RHEL6
    《通过脚本查看哪些ip被占用》shell笔记
    linux系统环境变量.bash_profile/bashrc文件
    清空系统日志shell scripts——自学笔记
    《linux源代码包的编译安装》RHEL6
    《linux 网卡别名的添加和绑定》RHEL6
    《iptables详解 》RHEL6
    转:swagger 入门
  • 原文地址:https://www.cnblogs.com/chrischeng/p/10237523.html
Copyright © 2020-2023  润新知