SpringCloud-Gateway转发WebSocket失败问题及解决

 更新时间:2023年09月22日 09:19:58   作者:焚目圣僧渡众生  
这篇文章主要介绍了SpringCloud-Gateway转发WebSocket失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

SpringCloud-Gateway转发WebSocket失败

正常调用单一服务时未出现异常

如:

当使用Gateway做转发时出现如下错误

1.websocket 连接报 java.nio.channels.ClosedChannelException: null;

2.前端js连接时出现websocket failed One or more reserved bits are on: reserved1 = 0, reserved2 = 1, reserved3 = 1的错误。

使用spring-boot-starter-websocket搭建了websocket服务,直接用服务的IP加端口访问是正常的,换成网关的访问地址就报错。

这样的情况需要在网关过滤掉websocket的请求

在网关找到:

加上判断,排除websocket的请求就可以了

String upgrade = exchange.getRequest().getHeaders().getUpgrade();
		if("websocket".equals(upgrade)){
			return chain.filter(exchange);
		}

如果还在报 1 中的NULL错误信息的话在websocket的注入时加上 subprotocols = {"protocol"}

这只是本地测试成功了,当部署到线上测试环境后,唉,怎么都连接不上!

后面才发现 通过nginx做了反向代理,在通过域名请求Gateway的时候没有过滤掉请求。

发现这里 upgrade 没有获取到,所以一直出现:

Error during WebSocket handshake: Unexpected response code: 200

的异常,后面发现原来是nginx没有配置,

在这里加了配置后完美解决获取不到的问题,并包含了:

failed: Error during WebSocket handshake: Unexpected response code: 404

的异常问题~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot如何配置嵌套map和list参数

    springboot如何配置嵌套map和list参数

    这篇文章主要介绍了springboot如何配置嵌套map和list参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • idea SpringBoot+Gradle环境配置到项目打包

    idea SpringBoot+Gradle环境配置到项目打包

    Gradle是一个基于Java应用的项目自动化构建工具,本文介绍了在IDEA中创建Spring Boot Gradle项目,项目配置包括init.gradle和settings.gradle,感兴趣的可以了解一下
    2024-11-11
  • Java线程之间通信的几种方式详解

    Java线程之间通信的几种方式详解

    在 Java 中,线程之间的通信是通过共享内存模型来实现的,线程通过共享的对象和变量来交换数据,为了确保线程间通信的正确性,Java 提供了一系列机制来实现线程安全、同步和通信,以下是常用的几种线程间通信的方式,以及它们的使用方法和场景,需要的朋友可以参考下
    2025-03-03
  • Maven项目外部jar包导入的实现示例

    Maven项目外部jar包导入的实现示例

    在Maven项目里,我们经常需要导入jar包依赖,本文主要介绍了Maven项目外部jar包导入的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Java聊天室之使用Socket实现传递图片

    Java聊天室之使用Socket实现传递图片

    这篇文章主要为大家详细介绍了Java简易聊天室之使用Socket实现传递图片功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以了解一下
    2022-10-10
  • Mybatis往Mapper.xml文件中传递多个参数问题

    Mybatis往Mapper.xml文件中传递多个参数问题

    这篇文章主要介绍了Mybatis往Mapper.xml文件中传递多个参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java状态设计模式实现对象状态转换的优雅方式

    Java状态设计模式实现对象状态转换的优雅方式

    Java状态设计模式通过将对象的行为和状态分离,使对象能够根据不同的状态进行不同的行为操作。它通过将状态抽象成一个独立的类来实现对状态的封装,从而简化了复杂的条件判断和状态转换
    2023-04-04
  • java 百度手写文字识别接口配置代码

    java 百度手写文字识别接口配置代码

    本文通过实例代码给大家介绍了java 百度手写文字识别接口配置方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-01-01
  • springboot枚举类型传递的步骤

    springboot枚举类型传递的步骤

    这篇文章主要介绍了springboot枚举类型传递的步骤,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04
  • 利用spring boot+WebSocket实现后台主动消息推送功能

    利用spring boot+WebSocket实现后台主动消息推送功能

    目前对于服务端向客户端推送数据,常用技术方案有轮询、websocket等,下面这篇文章主要给大家介绍了关于利用spring boot+WebSocket实现后台主动消息推送功能的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论