Netty每次读取客户端数量有多少
发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,这篇文章将为大家详细讲解有关Netty每次读取客户端数量有多少,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当许多客户端同时连接服务端时, Netty默认每次读取多
千家信息网最后更新 2025年02月12日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安全错误
数据库的锁怎样保障安全
数据库常见的索引
异次元主公服务器互通吗
数据库中的两级独立性
网络技术工作室往什么方向发展
如何读取ifix的数据库
软件开发有什么
工行软件开发程序员工资
在服务器绑定域名
部队清退数据库外职工该怎么赔偿
什么是四级网络安全员
天涯数据库
软件开发小组保密协议书
数据库对象管理约束唯一
服务器的hdd
河北5g网络技术
数据库自动编号技术
下列关于数据库技术的描述
北京博创网络技术有限公司
服务器删除后怎么恢复
聊城微信公众号软件开发哪家好
茂名华泰网络技术
僵尸毁灭工程进服务器闪退
沧州市国家网络安全宣传
游戏软件开发学什么语言
网络安全2000亿
网络安全问题的应对策略分析
温州网络技术开发
用友t3数据库表结构表
明日之后怎么把服务器分区
大学计算机基础数据库教程