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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM