博客
关于我
Netty常用组件一
阅读量:790 次
发布时间:2023-02-15

本文共 1825 字,大约阅读时间需要 6 分钟。

一、EventLoopGroup和EventLoop

EventLoopGroup是一组EventLoop的抽象,负责为每个新创建的Channel分配一个EventLoop。一个EventLoopGroup中可以包含一个或多个EventLoop。EventLoopGroup提供next接口,可以从一组EventLoop中按照一定规则获取其中一个EventLoop来处理任务。

常用的实现类包括NioEventLoopGroup(异步非阻塞)和OioEventLoopGroup(同步阻塞)。EventLoop接口定义了Netty核心抽象,用于处理网络连接生命周期中发生的事件。每个EventLoop在其生命周期内只与一个Thread绑定,所有由它处理的I/O事件都将在该Thread上被处理。一个EventLoop负责处理一个或多个Channel,而一个Channel在其生命周期内只注册于一个EventLoop。

二、Channel

Channel和EventLoop的关系:Channel需要注册到某个EventLoop上,整个生命周期内由该EventLoop处理I/O事件。一个Channel在其生命周期内只与一个EventLoop进行绑定,而一个EventLoop可以同时被多个Channel绑定。

Channel接口提供了所有I/O操作的API,降低了直接使用Socket的复杂性。Channel也是一个专门化实现的广泛类层次结构的根,并作为Comparable的一个子接口。常见方法包括eventLoop、pipeline、isActive、localAddress、remoteAddress、write、flush、writeAndFlush等。

三、ChannelPipeline

ChannelPipeline为Channel提供了一个处理事件的管道,每个Channel都有自己的ChannelPipeline。ChannelPipeline以双向链表形式维护ChannelHandler,定义了入站和出站事件流的API。开发中需要在初始化或引导阶段安装ChannelHandler,通过这些Handler接收和处理事件。ChannelHandlerContext用于关联ChannelHandler和ChannelPipeline,提供了触发事件和管理I/O操作的方法。

ChannelHandlerContext的方法包括alloc、bind、channel、close、connect、deregister、disconnect、executor、fireChannelActive、fireChannelInactive等。这些方法用于处理事件传播和I/O操作。与ChannelPipeline上的方法不同,ChannelHandlerContext的方法只会在其关联的ChannelPipeline中传播给下一个ChannelHandler。

四、ChannelOption类

ChannelOption类提供了多个套接字选项属性,常用的包括SO_BACKLOG、SO_REUSEADDR、SO_KEEPALIVE、SO_RCVBUF、SO_LINGER和TCP_NODELAY。这些选项可以根据需求进行设置,例如SO_BACKLOG用于设置服务端接受连接的队列长度,SO_REUSEADDR允许重复使用本地地址和端口。

通过配置ChannelOption,可以优化网络连接的性能和稳定性。例如,在创建服务端Bootstrap对象时,可以设置SO_BACKLOG和SO_KEEPALIVE选项,并为每个子通道设置相应的选项。

五、ChannelFuture接口

ChannelFuture接口用于处理异步I/O操作的完成通知。通过addListener方法可以注册一个ChannelFutureListener,用于在操作完成时接收通知。例如,客户端连接服务端时,可以添加一个监听器,接收连接状态的变化。

ChannelFuture的方法包括alloc、bind、channel、close、connect、deregister、disconnect、executor、fireChannelActive、fireChannelInactive等。这些方法用于管理I/O操作和事件处理,确保异步编程的高效性和非阻塞性。

转载地址:http://tpcfk.baihongyu.com/

你可能感兴趣的文章
Neo4j电影关系图Cypher
查看>>
Neo4j的安装与使用
查看>>
Neo4j(1):图数据库Neo4j介绍
查看>>
Neo4j(2):环境搭建
查看>>
Neo4j(3):Neo4j Desktop安装
查看>>
Neo4j(4):Neo4j - CQL使用
查看>>
Neo图数据库与python交互
查看>>
NEO改进协议提案1(NEP-1)
查看>>
Neo私链
查看>>
NervanaGPU 项目使用教程
查看>>
Nerves 项目教程
查看>>
nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
查看>>
Nessus漏洞扫描教程之配置Nessus
查看>>
Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
查看>>
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
查看>>
nestesd exception is java .lang.NoSuchMethodError:com.goolge.common.collect
查看>>
nestJS学习
查看>>
net core 环境部署的坑
查看>>
NET Framework安装失败的麻烦
查看>>
Net 应用程序如何在32位操作系统下申请超过2G的内存
查看>>