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)

相关推荐
cat_with_cat1 小时前
Linux网络:UDP socket创建流程与简单通信
linux·网络·udp
不绝1911 小时前
怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
网络·游戏·unity·游戏引擎
DemonAvenger2 小时前
Go中UDP编程:实战指南与使用场景
网络协议·架构·go
.YYY2 小时前
网络--初级
网络·计算机网络
2501_916007472 小时前
iOS 性能测试工具全流程:主流工具实战对比与适用场景
websocket·tcp/ip·http·网络安全·https·udp
阿维的博客日记2 小时前
HTTP/3.0的连接迁移使用连接ID来标识连接为什么可以做到连接不会中断
网络·网络协议·http
半路_出家ren2 小时前
第8章:应用层协议HTTP、SDN软件定义网络、组播技术、QoS
网络·网络协议·http·mpls·qos·sdn软件定义网络·组播技术
teeeeeeemo2 小时前
http和https的区别
开发语言·网络·笔记·网络协议·http·https
Bruce_Liuxiaowei3 小时前
Netstat高级分析工具:Windows与Linux双系统兼容的精准筛查利器
linux·运维·网络·windows·安全
iFulling3 小时前
【计算机网络】第三章:数据链路层(下)
网络·笔记·计算机网络