SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決
SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗
正常調(diào)用單一服務(wù)時未出現(xiàn)異常
如:

當使用Gateway做轉(zhuǎn)發(fā)時出現(xiàn)如下錯誤
1.websocket 連接報 java.nio.channels.ClosedChannelException: null;
2.前端js連接時出現(xiàn)websocket failed One or more reserved bits are on: reserved1 = 0, reserved2 = 1, reserved3 = 1的錯誤。

使用spring-boot-starter-websocket搭建了websocket服務(wù),直接用服務(wù)的IP加端口訪問是正常的,換成網(wǎng)關(guān)的訪問地址就報錯。
這樣的情況需要在網(wǎng)關(guān)過濾掉websocket的請求
在網(wǎng)關(guān)找到:

加上判斷,排除websocket的請求就可以了
String upgrade = exchange.getRequest().getHeaders().getUpgrade();
if("websocket".equals(upgrade)){
return chain.filter(exchange);
}
如果還在報 1 中的NULL錯誤信息的話在websocket的注入時加上 subprotocols = {"protocol"} ;

這只是本地測試成功了,當部署到線上測試環(huán)境后,唉,怎么都連接不上!
后面才發(fā)現(xiàn) 通過nginx做了反向代理,在通過域名請求Gateway的時候沒有過濾掉請求。

發(fā)現(xiàn)這里 upgrade 沒有獲取到,所以一直出現(xiàn):
Error during WebSocket handshake: Unexpected response code: 200
的異常,后面發(fā)現(xiàn)原來是nginx沒有配置,

在這里加了配置后完美解決獲取不到的問題,并包含了:
failed: Error during WebSocket handshake: Unexpected response code: 404
的異常問題~
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring?NamedContextFactory在Fegin配置及使用詳解
在我們?nèi)粘m椖恐?,使用FeignClient實現(xiàn)各系統(tǒng)接口調(diào)用變得更加簡單,?在各個系統(tǒng)集成過程中,難免會遇到某些系統(tǒng)的Client需要特殊的配置、返回讀取等需求。Feign使用NamedContextFactory來為每個Client模塊構(gòu)造單獨的上下文(ApplicationContext)2023-11-11
Java 異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲總結(jié)分析
異常是程序之中導(dǎo)致程序中斷的一種指令流,異常一旦出現(xiàn)并且沒有進行合理處理的話,那么程序就將中斷執(zhí)行,這篇文章綜合介紹了異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲2021-11-11
IDEA通過git回滾到某個提交節(jié)點或某個版本的操作方法
這篇文章主要介紹了IDEA通過git回滾到某個提交節(jié)點或某個版本的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

