代码拉取完成,页面将自动刷新
priv-auth
双重账户验证模式snmp协议采用UDP通信,UDP是TCP/IP协议栈传输层无连接协议,基于socket,可实行多路复用
基于udp的snmp协议IO模型设计
Netty#NioEventLoop
.线程模型
一个特定协议的网络通信服务主要功能可分3部分:(1)网络IO;(2)协议数据编解码;(3)对解码后的协议数据进行业务处理。 从I与O两个视角看线程模型:
- 同步模型:协议数据编码封装与发送动作由
send
操作调用者完成。缺点:发送动作是耗时阻塞任务,会阻塞调用线程直到write
发送动作完成- 纯异步模型:
send
操作调用者只管将发送信息(包括:数据内容、接收方信息)封装为发送任务提交到后置任务队列即可, 协议数据编码封装与发送动作的完成由后置线程接管,调用者立即返回- 半异步模型:
send
操作调用者负责协议数据编码封装和发送任务提交,发送动作的执行由后置线程完成, 从而避免将调用者阻塞在耗时较高的实际发送操作上
- 同步模型:网络数据读操作与数据解码及解码后的协议数据处理在同一根线程内相继完成
- 一对多——读操作线程-解码操作线程池隔离:1根IO线程 + 1个编解码线程池
- 多对多——读操作线程池-解码线程池:1个IO线程池 + 1个编解码线程池
详见测试用例(SnmpSenderTest)
SnmpSender snmpSender = SnmpSender.builder()
.ioStrategy(IoStrategy.NIO) //NIO策略
.multi(1) //IO线程组线程个数(决定起多少selector选择器)
.workerPool("snmp-msg-process-pool", //后置异步解码线程池
1, 3,
Duration.ofSeconds(60),
1024
)
.retry(0) //失败重试次数
.reqTimeoutMills(800) //请求超时时长
.nonRepeaters(0) //PDU#nonRepeaters,保持默认0
.maxRepetitions(24) //PDU#maxRepetitions
.usmUser(Arrays.asList( //snmpV3 USM认证账户信息注册
new UsmUserEntry("udp:192.168.1.1/161",
"user0",
UsmEncryptionEnum.SHA, "123456789",
UsmEncryptionEnum.AES128, "123456789"
))
)
.build();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。