Netty 的 ChannelOption.SO_BACKLOG 知识点整理
一个基于 Netty 的应用,在压力测试时,Socket 请求数量一多,就发送失败,监测 JVM 内存大小比较稳定,猜测可能是 ChannelOption.SO_BACKLOG 这个配置导致的,设置的值是 128 。
调整为 1024 后,连接失败的次数确实减少了一些,那么这个配置到底有什么作用呢?
本文来汇总一下这个知识点。
TCP/IP 的三次握手
TCP/IP 建立连接的三个阶段被称为“三次握手”,三次握手完成后,客户端和服务端建立连接,开始传输数据。
三次握手,这个图真的看到很多遍了哇,再回一下流程,像极了两个街头对接的人:
A:SYN ,客户端发起同步请求。你好呀,听说你开启了监听端口,我想给你传数据,方便建立连接吗,我先发一个序列号 x ?
B:SYN + ACK ,服务端发起同步请求。是的呀,我给你发一个我的序列号 y,对了,你的下一个序列号是 x +1 吗?
A:ACK,客户端确认请求,对着呢,你的下一个序列号 y+1 吗?
这三轮同步和确认操作后,客户端和服务器端就建立起了稳定的连接。
两个队列
这个过程中,服务器内核会用到两个队列:
syn 队列:未完成三次握手的连接,记作 A 队列;
accetp 队列:已完成三次握手,内核正等待进程执行 accept 函数的连接,记作 B 队列。
ChannelOption.SO_BACKLOG 配置就是控制 A + B 队列总长度的参数,如果这两个队列都满了,那么 Netty 服务将不会再接收新的连接请求了。
————————————————
版权声明:本文为CSDN博主「毕小宝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wojiushiwo945you/article/details/120021653