<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 楼主解决了没 |