Netty每次读取客户端数量有多少
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Netty每次读取客户端数量有多少,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当许多客户端同时连接服务端时, Netty默认每次读取多
千家信息网最后更新 2026年11月02日Netty每次读取客户端数量有多少当许多客户端同时连接服务端时, Netty默认每次读取多少连接呢? 接下来我们 就结合源码和实战分析下.
之前我们讲到NioEventLoop在进行三部曲之后(创建-启动-执行), 就会一直无限循环在执行过程. 而执行过程又分为三个步骤(轮询IO事件-处理IO事件-执行队列任务). 那么在轮询到有IO事件, 准确说当有客户端连接的事件时, 接下来就是处理IO事件, 也就是在处理IO事件的过程中, 读取客户端连接, 那么每次读取多少个呢? 说明一点, 我们使用的Netty版本如下. 因为不同的版本(尤其是最新的版本)会有差异.
当服务端一直循环在以下代码时
它会监听客户端请求. 我们假如此时通过telnet 127.0.0.1 8080连接到服务器共19个客户端.
服务器监听到ACCEPT事件后, 便会处理这些事件.
进而调用到如下主要代码
此方法内会有一个循环 我们通过debug方式调试. 为了模拟实现并发同时有19个客户端到达, 我们先在轮询IO事件地方打个断点, 让服务端线程'停止'. 当我们通过telnet执行了19个命令后再'放行'服务端线程.
断点打好之后, 我们便通过telnet 连接到服务器, 共连接19次. 连接好之后, 我们'放行'服务端线程. 我们在上面说的代码中打个断点 此时还没有读取客户端连接, 目前size = 0
当我们继续'放行'
可以看到size = 16
我们先继续'放行', 最后分析
服务器处理完上一波之后, 会再次轮询IO事件, 结果又轮询到ACCEPT事件, 继续处理IO事件. 这一次的size = 3
第一次size = 16 第二次size = 3 两个加起来正好等于我们的客户端连接数19. 于是我们猜测, 服务器每次读取客户端连接数是16. 虽然客户端同一时刻有19个客户端连接到服务器, 服务器也监听轮询到有客户端连接请求, 于是服务器在第一次循环过程只读取16个客户端. 剩下的3个客户端等到第二次轮询的时候再读取. 我们进入 查询一下.
我们可以看到有个 maxMessagePerRead属性, 它就是控制每次读取客户端数量. 我们 通过debug追踪下这个值 . 我们在如下代码中打个断点. 重启服务器 我们发现它最后被赋值16, 我们通过堆栈可以追踪到它的来源.
最后我们发现, 在创建NioServerSocketChannel的时候, 同时创建config(每个Channel对应一个Config). 每个Config对应一个RecvByteBufAllocator. 而maxMessagesPerRead属性属于 RecvByteBufAllocator类. 而那个具体的16是在哪里呢? 每个Channel都有meta
源码中可知, 将这个16赋值给了 RecvByteBufAllocator的 maxMessagesPerRead属性. 结论: 服务端每次读取16个客户端请求
这篇文章将为大家详细讲解有关Netty每次读取客户端数量有多少,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
io.netty netty-all 4.1.5.Final
io.netty.channel.nio.NioEventLoop#run
io.netty.channel.nio.NioEventLoop#processSelectedKeys
io.netty.channel.nio.AbstractNioMessageChannel.NioMessageUnsafe#read
do { int localRead = doReadMessages(readBuf); if (localRead == 0) { break; } if (localRead < 0) { closed = true; break; } allocHandle.incMessagesRead(localRead);} while (allocHandle.continueReading());

allocHandle.continueReading()
io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator.MaxMessageHandle#continueReading
public boolean continueReading() { return config.isAutoRead() && attemptedBytesRead == lastBytesRead && totalMessages < maxMessagePerRead && totalBytesRead < Integer.MAX_VALUE;}io.netty.channel.DefaultMaxMessagesRecvByteBufAllocator#maxMessagesPerRead(int)
关于"Netty每次读取客户端数量有多少"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
客户
客户端
服务
事件
服务器
处理
代码
断点
过程
循环
数量
同时
属性
版本
篇文章
线程
接下来
就是
时候
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
互联网科技海报
互联网是第几次科技革命的成果
互联网的科技
银优互联网科技有限公司
上海万想互联网科技
深圳艾佳互联网科技
互联网科技美容
互联网科技实习生岗位职责
互联网校园科技培训
智腾互联网科技有限公司
中国航天科技大学国际工业互联网
阿大互联网科技有限公司
新兴科技互联网创新大赛颁奖典礼
电子科技大学互联网创业大赛
华夏恒生互联网科技013171
启辰互联网科技
互联网科技数字货币
陕西云淼互联网科技公司
银川新华互联网科技学校招聘
互联网科技公司的优势
互联网扶贫科技
北京互联网科技
无锡溥仪互联网科技有限公司
团飞科技与伯堂互联网服务平台
乌苏新华互联网科技做什么的
互联网科技平台产品运营
互联网科技机房
长沙渺峰互联网科技有限公司
西安左小互联网科技有限公司