zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    promise
    ES6中的类
    css基础知识
    ES6数据解构:set map 的介绍
    ES6对象的拓展
    ES6函数的拓展
    ES6数组的拓展
    ES6字符串和数值的扩展
    webpack的三种运行方式
    Mysql数据增删改操作以及复制表小技巧
  • 原文地址:https://www.cnblogs.com/chrischeng/p/10237523.html
Copyright © 2011-2022 走看看