Netty 的 ChannelOption.SO_BACKLOG 知识点整理
Posted 毕小宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty 的 ChannelOption.SO_BACKLOG 知识点整理相关的知识,希望对你有一定的参考价值。
背景
一个基于 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 知识点整理的主要内容,如果未能解决你的问题,请参考以下文章
Mobilefirst 8.0 错误 IOS 推送通知。无法加载 netty_tcnative_aix_ppc_64、netty_tcnative_ppc_64、netty_tcnative