Netty每次读取客户端数量有多少
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章将为大家详细讲解有关Netty每次读取客户端数量有多少,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当许多客户端同时连接服务端时, Netty默认每次读取多
千家信息网最后更新 2025年12月03日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安全错误
数据库的锁怎样保障安全
2025服务器市场
网络安全主场在什么空间
显示4g网络可是无法连接服务器
400 数据库
数据库的应用开发
网络安全周 海报
用友怎样导入备份数据库
孝感网络安全日
国家网络安全公司排名
PLC是服务器吗
软件开发怎么提高技能
PQDT数据库是
网络安全红蓝对抗的意义
香港无线云服务器价格
ai服务器的发展
网络安全微视频词
环县网络安全采访
web服务器管理口
江苏机电软件开发原料
mdb文件还原数据库文件
电力网络安全保密协议
天津联想服务器虚拟化优势
软件开发的税
三级数据库题库激活码
数据库自然连接合并两张表
根据数据库生成地形图
北京 软件开发人天单价
数据库并交差运算条件
网络安全法和网络知识手抄报
服务器做店群