SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗問題及解決
SpringCloud-Gateway轉(zhuǎn)發(fā)WebSocket失敗
正常調(diào)用單一服務(wù)時(shí)未出現(xiàn)異常
如:
當(dāng)使用Gateway做轉(zhuǎn)發(fā)時(shí)出現(xiàn)如下錯(cuò)誤
1.websocket 連接報(bào) java.nio.channels.ClosedChannelException: null;
2.前端js連接時(shí)出現(xiàn)websocket failed One or more reserved bits are on: reserved1 = 0, reserved2 = 1, reserved3 = 1的錯(cuò)誤。
使用spring-boot-starter-websocket搭建了websocket服務(wù),直接用服務(wù)的IP加端口訪問是正常的,換成網(wǎng)關(guān)的訪問地址就報(bào)錯(cuò)。
這樣的情況需要在網(wǎng)關(guān)過濾掉websocket的請(qǐng)求
在網(wǎng)關(guān)找到:
加上判斷,排除websocket的請(qǐng)求就可以了
String upgrade = exchange.getRequest().getHeaders().getUpgrade(); if("websocket".equals(upgrade)){ return chain.filter(exchange); }
如果還在報(bào) 1 中的NULL錯(cuò)誤信息的話在websocket的注入時(shí)加上 subprotocols = {"protocol"}
;
這只是本地測試成功了,當(dāng)部署到線上測試環(huán)境后,唉,怎么都連接不上!
后面才發(fā)現(xiàn) 通過nginx做了反向代理,在通過域名請(qǐng)求Gateway的時(shí)候沒有過濾掉請(qǐng)求。
發(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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot如何配置嵌套map和list參數(shù)
這篇文章主要介紹了springboot如何配置嵌套map和list參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03idea SpringBoot+Gradle環(huán)境配置到項(xiàng)目打包
Gradle是一個(gè)基于Java應(yīng)用的項(xiàng)目自動(dòng)化構(gòu)建工具,本文介紹了在IDEA中創(chuàng)建Spring Boot Gradle項(xiàng)目,項(xiàng)目配置包括init.gradle和settings.gradle,感興趣的可以了解一下2024-11-11Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例
在Maven項(xiàng)目里,我們經(jīng)常需要導(dǎo)入jar包依賴,本文主要介紹了Maven項(xiàng)目外部jar包導(dǎo)入的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08Java聊天室之使用Socket實(shí)現(xiàn)傳遞圖片
這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之使用Socket實(shí)現(xiàn)傳遞圖片功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以了解一下2022-10-10Mybatis往Mapper.xml文件中傳遞多個(gè)參數(shù)問題
這篇文章主要介紹了Mybatis往Mapper.xml文件中傳遞多個(gè)參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java狀態(tài)設(shè)計(jì)模式實(shí)現(xiàn)對(duì)象狀態(tài)轉(zhuǎn)換的優(yōu)雅方式
Java狀態(tài)設(shè)計(jì)模式通過將對(duì)象的行為和狀態(tài)分離,使對(duì)象能夠根據(jù)不同的狀態(tài)進(jìn)行不同的行為操作。它通過將狀態(tài)抽象成一個(gè)獨(dú)立的類來實(shí)現(xiàn)對(duì)狀態(tài)的封裝,從而簡化了復(fù)雜的條件判斷和狀態(tài)轉(zhuǎn)換2023-04-04利用spring?boot+WebSocket實(shí)現(xiàn)后臺(tái)主動(dòng)消息推送功能
目前對(duì)于服務(wù)端向客戶端推送數(shù)據(jù),常用技術(shù)方案有輪詢、websocket等,下面這篇文章主要給大家介紹了關(guān)于利用spring?boot+WebSocket實(shí)現(xiàn)后臺(tái)主動(dòng)消息推送功能的相關(guān)資料,需要的朋友可以參考下2022-04-04