博客
关于我
Netty常用组件一
阅读量:791 次
发布时间: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/

你可能感兴趣的文章
netty——Channl的常用方法、ChannelFuture、CloseFuture
查看>>
netty——EventLoop概念、处理普通任务定时任务、处理io事件、EventLoopGroup
查看>>
netty——Future和Promise的使用 线程间的通信
查看>>
netty——Handler和pipeline
查看>>
Vue输出HTML
查看>>
netty——黏包半包的解决方案、滑动窗口的概念
查看>>
Netty中Http客户端、服务端的编解码器
查看>>
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
查看>>
Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
查看>>
Netty中的组件是怎么交互的?
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>
Netty原理分析及实战(一)-同步阻塞模型(BIO)
查看>>
Netty原理分析及实战(三)-高可用服务端搭建
查看>>
Netty原理分析及实战(二)-同步非阻塞模型(NIO)
查看>>
Netty原理分析及实战(四)-客户端与服务端双向通信
查看>>