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

  • 相关阅读:
    刷题[CISCN2019 华东南赛区]Web4
    刷题[GWCTF 2019]你的名字
    刷题[b01lers2020]Life on Mars
    刷题[SUCTF 2018]GetShell
    洛谷入门2-分支结构
    洛谷入门3-循环结构:回文质数、斐波那契数列
    洛谷入门3-循环结构:金币、最长连号
    洛谷入门3-循环结构:津津的储蓄计划
    C++类成员初始化方法
    英语听力
  • 原文地址:https://www.cnblogs.com/chrischeng/p/10237523.html
Copyright © 2011-2022 走看看