<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency
1
vagusss 2022-10-14 08:50:57 +08:00
客户端搞个断开重连机制
|
2
smith123 OP @vagusss 弄了重连机制,但是我是在做 ping 之前发现断开才会重连,就怕业务执行完了准备发消息,但是 websocket 还没重连上,咋办?
|
3
ksco 2022-10-14 09:28:03 +08:00
1. 加心跳( PING/PONG frame );
2. 服务端维护队列,如果没有和客户端连接成功,就先把消息放到队列中暂存。 |
5
gesse 2022-10-14 09:33:05 +08:00
先把问题简单化
你先建立一个普通的 tcp 连接, 设置 keepalive ,看看会不会被阻断,看是否能找到原因。 |
6
whajcf 2022-10-14 09:35:45 +08:00
环境问题 我们 4 套 k8s 环境 其中一套阿里云功能就是这个情况 排查到最后就是网关的配置问题
解决办法就是业务放队列 加重发机制 加回执 |
7
coderxy 2022-10-14 09:38:21 +08:00
大概率是中间某个环节出了问题造成连接被中断。 可以做测试,最后确定到底是哪两个节点之间出的问题
|
8
des 2022-10-14 09:38:31 +08:00 via iPhone
看看是不是准时一个小时?如果是的话那就是某处有超时
|
9
lambdaq 2022-10-14 09:41:46 +08:00
很显然,org.java-websocket 和浏览器之间还有个比如 nginx 之类的可以撑 60 分钟不掉线的中间件
|
10
xiaoshenghaohao 2022-10-14 10:38:26 +08:00
@lambdaq 赞同,估计 nginx 设置的时间 proxy_connect_timeout ,proxy_read_timeout ,proxy_send_timeout 应该是 60 分钟
|
12
ytmsdy 2022-10-14 10:59:25 +08:00
之前也遇到过这个问题,连着好好的,但是会断。
我的处理方式是这样的,把接受到的消息直接 push 到 redis 里面,提高响应速度。 然后用单独的程序,把 redis 里面的数据 pop 出来。 这么处理以后,就没有再出现过问题了。 后来我想了想有可能是服务端的 WebSotket 觉得你响应太慢了,然后把通信给关掉了。 |
13
angryPHP 2022-11-14 14:42:00 +08:00
楼主解决了没
|