Linyuzai / concept

封装了一些常用组件,走过路过不要错过哦
Apache License 2.0
416 stars 122 forks source link

自身实例去连接其他实例时报404 #39

Closed anganing closed 3 months ago

anganing commented 4 months ago

依赖名称:

com.github.linyuzai concept-websocket-loadbalance-spring-boot-starter 1.1.2

依赖版本: 1、2版本都有该问题 问题描述: 我的基础路径是 /api/sys 而该库在降自身实例连接到其他ws时没有加上这个前缀导致连接404 image

异常堆栈: 2024-05-13 15:55:52 | INFO | com.github.linyuzai.connection.loadbalance.core.monitor.LoadBalanceMonitorLogger | info:28 | LBWebSocket >> Start running monitor for load balance 2024-05-13 15:55:52 | INFO | org.springframework.web.socket.client.WebSocketConnectionManager | startInternal:117 | Starting WebSocketConnectionManager 2024-05-13 15:55:52 | INFO | org.springframework.web.socket.client.WebSocketConnectionManager | openConnection:136 | Connecting to WebSocket at ws://10.10.52.56:8084/concept-websocket-subscriber 2024-05-13 15:55:52 | ERROR | org.springframework.web.socket.client.WebSocketConnectionManager | onFailure:150 | Failed to connect javax.websocket.DeploymentException: The HTTP response from the server [404] did not permit the HTTP upgrade to WebSocket at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:437) at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:197) at org.springframework.web.socket.client.standard.StandardWebSocketClient.lambda$doHandshakeInternal$0(StandardWebSocketClient.java:151) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:745)

Linyuzai commented 4 months ago

你的基础路径是指配置了server.servlet.context-path这个属性吗

Linyuzai commented 4 months ago

我额外加一个相互连接时候的路径前缀配置,应该能解决你的问题

你那边可以升2.x版本吗,可以的话我就在2.x版本上加这个

anganing commented 4 months ago

你的基础路径是指配置了server.servlet.context-path这个属性吗

是的,大佬,我把你类复写一下就没问题了

anganing commented 4 months ago

我额外加一个相互连接时候的路径前缀配置,应该能解决你的问题

你那边可以升2.x版本吗,可以的话我就在2.x版本上加这个

我测试一下 2版本,大佬同时有个问题请教一下 这个做心跳检测怎么做呢 前端发一个 ping 过来 我如何去返回一个 pong 字符串给前端

anganing commented 4 months ago

我额外加一个相互连接时候的路径前缀配置,应该能解决你的问题 你那边可以升2.x版本吗,可以的话我就在2.x版本上加这个

我测试一下 2版本,大佬同时有个问题请教一下 这个做心跳检测怎么做呢 前端发一个 ping 过来 我如何去返回一个 pong 字符串给前端

image

Linyuzai commented 4 months ago

这个库自带了心跳检测的,有对应的配置

如果你自己实现的话可以按照你上面写的那样,不过需要手动处理转发的心跳数据

javax的websocket有自带的发送ping和pong的方法,而且会自动处理ping并返回pong

你可以看看这篇文章有提到相关的内容 https://juejin.cn/post/7111132777394733064#heading-5

anganing commented 4 months ago

这个库自带了心跳检测的,有对应的配置

如果你自己实现的话可以按照你上面写的那样,不过需要手动处理转发的心跳数据

javax的websocket有自带的发送ping和pong的方法,而且会自动处理ping并返回pong

你可以看看这篇文章有提到相关的内容 https://juejin.cn/post/7111132777394733064#heading-5

好的,感谢您的解答,不过我看您其他长连接的很多库都没有读取server.servlet.context-path这个路径进去呢

Linyuzai commented 4 months ago

2.6.0的版本加了配置可以解决连接其他实例404的问题,可以试一下

concept:
  websocket:
    load-balance:
      subscriber-endpoint: /api/sys/concept-websocket-subscriber #这里配置连接的端点