我是靠谱客的博主 爱听歌金毛,最近开发中收集的这篇文章主要介绍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 】

三次握手,这个图真的看到很多遍了哇,再回一下流程,像极了两个街头对接的人:

  1. A:SYN ,客户端发起同步请求。你好呀,听说你开启了监听端口,我想给你传数据,方便建立连接吗,我先发一个序列号 x ?
  2. B:SYN + ACK ,服务端发起同步请求。是的呀,我给你发一个我的序列号 y,对了,你的下一个序列号是 x +1 吗?
  3. A:ACK,客户端确认请求,对着呢,你的下一个序列号 y+1 吗?

这三轮同步和确认操作后,客户端和服务器端就建立起了稳定的连接。

两个队列

这个过程中,服务器内核会用到两个队列:

  1. syn 队列:未完成三次握手的连接,记作 A 队列;
  2. accetp 队列:已完成三次握手,内核正等待进程执行 accept 函数的连接,记作 B 队列。

ChannelOption.SO_BACKLOG 配置就是控制 A + B 队列总长度的参数,如果这两个队列都满了,那么 Netty 服务将不会再接收新的连接请求了。

最后

以上就是爱听歌金毛为你收集整理的Netty 的 ChannelOption.SO_BACKLOG 知识点整理的全部内容,希望文章能够帮你解决Netty 的 ChannelOption.SO_BACKLOG 知识点整理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部