概述
背景
一个基于 Netty 的应用,在压力测试时,Socket 请求数量一多,就发送失败,监测 JVM 内存大小比较稳定,猜测可能是 ChannelOption.SO_BACKLOG
这个配置导致的,设置的值是 128 。
调整为 1024 后,连接失败的次数确实减少了一些,那么这个配置到底有什么作用呢?本文来汇总一下这个知识点。
TCP/IP 的三次握手
TCP/IP 建立连接的三个阶段被称为“三次握手”,三次握手完成后,客户端和服务端建立连接,开始传输数据。
【此图来源于网络 https://blog.csdn.net/weixin_44730681/article/details/113728895 】
三次握手,这个图真的看到很多遍了哇,再回一下流程,像极了两个街头对接的人:
- A:
SYN
,客户端发起同步请求。你好呀,听说你开启了监听端口,我想给你传数据,方便建立连接吗,我先发一个序列号 x ? - B:
SYN + ACK
,服务端发起同步请求。是的呀,我给你发一个我的序列号 y,对了,你的下一个序列号是x +1
吗? - A:
ACK
,客户端确认请求,对着呢,你的下一个序列号 y+1 吗?
这三轮同步和确认操作后,客户端和服务器端就建立起了稳定的连接。
两个队列
这个过程中,服务器内核会用到两个队列:
syn
队列:未完成三次握手的连接,记作 A 队列;accetp
队列:已完成三次握手,内核正等待进程执行accept
函数的连接,记作 B 队列。
ChannelOption.SO_BACKLOG
配置就是控制 A + B
队列总长度的参数,如果这两个队列都满了,那么 Netty 服务将不会再接收新的连接请求了。
最后
以上就是爱听歌金毛为你收集整理的Netty 的 ChannelOption.SO_BACKLOG 知识点整理的全部内容,希望文章能够帮你解决Netty 的 ChannelOption.SO_BACKLOG 知识点整理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复