websocket服务端大报文发送连接自动断开分析

概述

当前springboot版本:2.7.4

使用依赖

xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

现象概述:

客户端和服务端已经有心跳连接正常ping,pong.

服务端发送大报文给客户端时,当经过心跳间隔,chrome(客户端)中提示websocket连接已被关闭。

此时打开chromenetwork查看ws报文发送情况,发现服务端并没有推送报文过来。

这个时候就怀疑是服务端在某个异常情况下关闭了连接

排查经过

先查看websocket服务端的tomcat日志,并没有发现可疑的日志,只看到在调用sendMessage前的一个log.info日志。

那么此时就准备开始调试了,进入发送消息的地方,发现有个超时时间
org.apache.tomcat.websocket.WsRemoteEndpointImplBase#sendMessageBlock(java.nio.CharBuffer, boolean)

点进去后,看到默认是 20s + 当前时间戳

然后发送的时候比较当前发送的总时间是否已经超过20s,如果超过则直接关闭连接。

org.apache.tomcat.websocket.WsRemoteEndpointImplBase#sendMessageBlock(byte, java.nio.ByteBuffer, boolean, long)

相关推荐
小二·17 小时前
Python 异步编程深度解析:Async/Await 实战
网络·python·github
Yang961117 小时前
宽温大功率输出,LDMN-GM7 助力矿区雷达性能验收工作
网络·能源
电子科技圈17 小时前
CXL连接全面赋能AI与车载算力提升,SmartDV CXL全栈IP加速相关芯片设计
人工智能·网络协议·tcp/ip·机器学习·自动驾驶·边缘计算
必胜刻17 小时前
一个异步生成游戏功能的落地复盘:Redis Stream + WebSocket + 状态补偿
redis·websocket·golang·gin·状态补偿
网安小白的进阶之路17 小时前
B模块 安全通信网络 第二门课IPv6与WLAN 03
网络·安全
海绵宝宝de派小星17 小时前
MCP与A2A协议深度解析:Agent时代的“TCP/IP“如何诞生
arm开发·网络协议·tcp/ip·ai
dong__csdn17 小时前
websocket实现简单的单聊、群聊demo
网络·websocket·网络协议
一只小鱼儿吖17 小时前
代理IP与内网穿透:网络世界的“隐形斗篷”与“任意门”
网络
天行健,君子而铎18 小时前
自适应、全链路与智能识别——政务数据安全泛监测系统
java·网络·政务
搞科研的小刘选手18 小时前
【西安交通大学主办】第六届人工智能、自动化与高性能计算国际会议 (AIAHPC 2026)
网络·人工智能·机器学习·数据挖掘·自动化·云计算·并行式