GateWay 分发WebSocket 报错

    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>


    </dependencies>

网关依赖就只有这个,但是webSocket连接的时候给我报错

java.lang.ClassCastException: org.apache.catalina.connector.ResponseFacade cannot be cast to reactor.netty.http.server.HttpServerResponse

at org.springframework.web.reactive.socket.server.upgrade.ReactorNettyRequestUpgradeStrategy.upgrade(ReactorNettyRequestUpgradeStrategy.java:163) ~[spring-webflux-5.3.23.jar:5.3.23]

    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    *__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
    *__checkpoint ⇢ HTTP GET "/ws/583875210412037" [ExceptionHandlingWebHandler]

查了很多资料,都叫我去除依赖,但是去一个就报错一个,后面看到有大佬在评论区说用这个,真的有效

@Configuration
public class GateWayConfig {

    @Bean
    @Primary
    public RequestUpgradeStrategy requestUpgradeStrategy() {
        return new TomcatRequestUpgradeStrategy();
    }

    @Bean
    @Primary
    public WebSocketClient webSocketClient() {
        return new TomcatWebSocketClient();
    }


}

### 关于 WebSocket 报错解决方案 #### 错误描述 当尝试通过微信小程序建立 WebSocket 连接时,可能会遇到 `Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received` 的错误提示[^1]。此问题通常发生在服务器未能正确响应带有特定协议头的请求。 #### 可能的原因 该类错误主要源于客户端与服务端之间的握手过程出现问题。具体来说,在发起 WebSocket 请求时,如果指定了子协议(即 `'Sec-WebSocket-Protocol'` 头部字段),而服务器并未对此作出回应,则会触发上述异常情况。此外,若在 WebSocket 尚未进入 OPEN 状态之前便调用了 send 方法也会引发类似的连接失败现象[^2]。 #### 解决方案建议 为了有效处理此类问题,可以从以下几个方面入手: ##### 客户端调整 确保仅在 WebSocket 成功开启之后才发送数据。可以通过监听 onopen 事件来实现这一点: ```javascript ws.onopen = function(event) { console.log("Connection opened."); ws.send('Message from client'); }; ``` 同时,在实际应用中应当先验证 WebSocket 当前的状态是否允许传输消息: ```javascript if (ws.readyState === WebSocket.OPEN) { ws.send('Data to be sent'); } ``` ##### 服务端配置优化 对于采用 Django Channels 构建的服务端而言,需确认已按照官方文档完成必要的设置工作,特别是关于支持自定义协议的部分[^3]。这可能涉及到修改项目的路由文件以及适当扩展消费者逻辑以适应不同类型的 WebSocket 协议需求。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡尘扰凡心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值