Netty系列(四):源码解读 backlog 参数作用

news2024/11/15 14:20:36

sun.nio.ch.ServerSocketChannelImpl#bind方法

ServerSocketChannel接口中,有一个bind方法,这个方法的作用是将通道的套接字绑定到本地地址并配置套接字以侦听连接。即用于在套接字和本地地址之间建立关联。而一旦建立关联,套接字将保持绑定状态,直到通道关闭。
我们注意到bind方法中有一个backlog参数,它表示套接字上挂起连接的最大数量。local参数表示绑定套接字的地址,如果其值为null,则绑定到自动分配的套接字地址。

@Override
public ServerSocketChannel bind(SocketAddress local, int backlog) throws IOException {
    synchronized (lock) {
        if (!isOpen())
            throw new ClosedChannelException();
        if (isBound())
            throw new AlreadyBoundException();
        InetSocketAddress isa = (local == null) ? new InetSocketAddress(0) :
            Net.checkAddress(local);
        SecurityManager sm = System.getSecurityManager();
        if (sm != null)
            sm.checkListen(isa.getPort());
        NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort());
        Net.bind(fd, isa.getAddress(), isa.getPort());
        Net.listen(fd, backlog < 1 ? 50 : backlog);
        synchronized (stateLock) {
            localAddress = Net.localAddress(fd);
        }
    }
    return this;
}

backlog参数含义

backlog参数为socket套接字监听端口时,内核为该套接字分配的一个队列大小,在服务端还没有来得及处理请求时, 用来暂时缓存请求的一个队列。如果该队列已经被客户端socket占满了,新的连接再过来时,ServerSocket就会拒绝新的连接。
总之backlog提供了容量限制功能,避免太多的客户端socket占用太多服务器资源。但如果连接处于休眠状态,即在没有数据传输的情况下是不属于服务处理中的连接,不占用队列。

源码实践

如果我们不通过.option(NioChannelOption.SO_BACKLOG, 511);来设置backlog的值,那么backlog的默认值是多少。

我们在netty源码中可以看到backlog的默认值被设为 NetUtil.SOMAXCONN,这个值是系统内核somaxconn参数,在我的mac电脑中这个值为128。

在这里插入图片描述

通过指令sysctl -a | grep somax查看系统内核somaxconn参数

在这里插入图片描述

然后我们尝试修改这个值,并查看netty启动时backlog参数值大小。

通过指令sysctl -w net.core.somaxconn=1024将系统内核somaxconn参数修改为1024,此时是临时生效,重启后恢复128。

在启动netty,发现backlog参数变成了1024,符合预期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html5期末大作业——HTML+CSS公益关爱残疾人( 6个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Metabase学习教程:系统管理-3

保持条理化 当用户、问题和仪表盘的数量不可避免地增加时&#xff0c;如何保持分析的组织性。 如果您想保持竞争力&#xff0c;您需要让组织中的人员访问他们需要的数据&#xff0c;以便做出更好的决策。然而&#xff0c;这种数据自主化的代价是不可避免的大量分析——这会使…

CentenOS安装使用Docker

1 先更新一下yum 执行 yum -y update 这样算完成 2 清理一下&#xff0c;原来可能安过的docker yum remove docker docker-common docker-selinux docker-engine 3 安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 安装过的可以跳过 4 配置yum中…

Qt OpenGL 光照和键盘控制

这次教程中&#xff0c;我们将添加光照和键盘控制&#xff0c;它让程序看起来更美观。我将教大家如何使用键盘来移动场景中的对象&#xff0c;还会教大家在OpenGL场景中应用简单的光照&#xff0c;让我们的程序更加视觉效果更好且受我们控制。 程序运行时效果如下&#xff1a;…

java项目_第168期ssm二手车交易网站-_计算机毕业设计

java项目_第168期ssm二手车交易网站-_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm二手车交易网站》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、商品信息、论坛信息、新闻资讯 、留言反馈、购物车、跳转…

目的:ubuntu配置使用opengl - 初探-创建一个空窗口

目的&#xff1a;ubuntu配置使用openGL - 初探-创建一个空窗口 环境&#xff1a; 系统&#xff1a;Ubuntu18.04 环境&#xff1a;g步骤&#xff1a; Ubuntu下使用openGL&#xff0c;搭建配置环境并测试窗口 1、openGL库&#xff0c;需要单独安装&#xff0c;由于本机是vmwar…

萌新源api管理系统更新教程

前言 萌新源API管理系统旨在大家提供一个更为方便的管理api的方法&#xff0c;经过几个月的时间&#xff0c;目前已经迭代到v4.41版本 那么这篇文章呢&#xff0c;也是想要教一下大家怎样去更新我们最新版本的管理系统&#xff0c;我最近也是在研究自动化更新&#xff0c;但是…

【CVPR2022】Detecting Camouflaged Object in Frequency Domain

【CVPR2022】Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现&#xff1a;https://github.com/VisibleShadow/Implementation-of-Detecting-Camouflaged-Object-in-Frequency-Domain 感觉这个论文是CVPR2022 Learning in the frequency domain 论文…

具有 1 个射频链的 OFDM-MIMO 系统的波束训练(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于多能互补的热电联供型微网优化运行(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

特征缩放是强制性的吗? 什么时候使用标准化? 什么时候使用归一化?数据的分布会发生什么变化?对异常值有什么影响?模型的准确性会提高吗?

以上问题也是面试中经常被问到的问题,我将在本博客中尝试通过提供合适的例子来回答上述问题。我们将使用 sklearn 的 StandardScaler 和 MinMaxScaler。 让我们考虑一个数据集,其中Age和Estimated Salary是输入特征,我们必须预测产品是否已购买(输出标签)或未购买。 看看…

【1796. 字符串中第二大的数字】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个混合字符串 s &#xff0c;请你返回 s 中 第二大 的数字&#xff0c;如果不存在第二大的数字&#xff0c;请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1&#xff1a; 输入…

Spring - BeanFactoryAware扩展接口

文章目录Preorg.springframework.beans.factory.BeanFactoryAware扩展点说明Aware接口Spring内建Aware接口的执行时机及顺序源码解析 &#xff08;直接调用&#xff09;源码分析 _ BeanPostProcessor调用执行顺序扩展点示例Pre Spring Boot - 扩展接口一览 org.springframewor…

Kotlin Flow 背压和线程切换竟然如此相似

前言 上篇分析了Kotlin Flow原理&#xff0c;大部分操作符实现比较简单&#xff0c;相较而言背压和线程切换比较复杂&#xff0c;遗憾的是&#xff0c;纵观网上大部分文章&#xff0c;关于Flow背压和协程切换这块的原理说得比较少&#xff0c;语焉不详&#xff0c;鉴于此&…

5G无线技术基础自学系列 | 5G上行功率控制

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G上行功率控制是针对每个UE的不同信道…

CS224W 8 GNN Augmentation andTraining

目录 Graph Augmentation for GNNs 引入 Why Graph Augmentation Graph Augmentation Approaches Feature Augmentation on Graphs Input graph没有node features GNN很难学习的一些特定结构 Graph Structure augmentation Augment sparse graphs——添加虚拟节点或边…

不同平台下运行历程代码

不同平台下运行历程代码 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据…

【Mysql】索引

文章目录一.索引的价值1.1. mysql与磁盘交互的基本单位建立共识1.2. 为什么IO交互的基本单位为Page理解单个Page理解多个Page提高在单个Page中的查找效率针对多页情况的页目录为什么选择B树,而不是其他数据结构&#xff1f;没有主键会怎么创建索引为什么推荐使用自增ID作为主键…

Spring(Bean 作用域和生命周期)

目录 1. 案例1: Bean作用域的问题 2. 作用域 3. 设置 Bean 的作用域 4. Spring 的执行流程 5. Bean 的生命周期 1. 案例1: Bean作用域的问题 现在有一个公共的 Bean,通过给 A 用户 和 B 用户使用, 然后在使用的过程中 A 偷偷的修改了公共 Bean 的数据, 导致 B 在使用时发…

html静态网站基于动漫网站网页设计与实现共计4个页面

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…