概述
当前springboot
版本:2.7.4
使用依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
现象概述:
客户端和服务端已经有心跳连接正常ping,pong
.
服务端发送大报文给客户端时,当经过心跳间隔,chrome(客户端)
中提示websocket
连接已被关闭。
此时打开chrome
的network
查看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)
文章来源:https://www.toymoban.com/news/detail-629766.html
文章来源地址https://www.toymoban.com/news/detail-629766.html
到了这里,关于websocket服务端大报文发送连接自动断开分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!