1.报错:
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid subprotocol. Actual: null. Expected one of: protocol,subprotocol

这个报错的原因是前端请求头里面有这个:Sec-WebSocket-Protocol

按道理来讲,这是前端和后端定义的子协议,即前端传递这个请求头到后端,后端判断请求头的内容是不是一致,一致通过。

但是如果后端没有制定相关业务逻辑那么就会报上面那个错误,解决办法:去掉前端这个请求头
添加:

          filters:
#            - AddRequestHeader=Sec-WebSocket-Protocol,chat  #添加请求头
            - RemoveRequestHeader=Sec-WebSocket-Protocol #移除请求头

完整代码如下

spring:
  profiles:
    active: @spring.profiles.active@
  application:
    name: hashring-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: gateway-websocket    #websocket 链接转发      #路由的ID,没有固定规则但要求唯一,建议配合服务名
          #uri: http://localhost:8001          #匹配后提供服务的路由地址
          uri: lb:ws://websocket #匹配后提供服务的路由地址
#          uri: ws://127.0.0.1:3309 #匹配后提供服务的路由地址

          predicates:
           - Path=/socket/*     # 断言,路径相匹配的进行路由
          filters:
#            - AddRequestHeader=Sec-WebSocket-Protocol,chat  #添加请求头
            - RemoveRequestHeader=Sec-WebSocket-Protocol #移除请求头

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐