本文共 1825 字,大约阅读时间需要 6 分钟。
EventLoopGroup是一组EventLoop的抽象,负责为每个新创建的Channel分配一个EventLoop。一个EventLoopGroup中可以包含一个或多个EventLoop。EventLoopGroup提供next接口,可以从一组EventLoop中按照一定规则获取其中一个EventLoop来处理任务。
常用的实现类包括NioEventLoopGroup(异步非阻塞)和OioEventLoopGroup(同步阻塞)。EventLoop接口定义了Netty核心抽象,用于处理网络连接生命周期中发生的事件。每个EventLoop在其生命周期内只与一个Thread绑定,所有由它处理的I/O事件都将在该Thread上被处理。一个EventLoop负责处理一个或多个Channel,而一个Channel在其生命周期内只注册于一个EventLoop。
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为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类提供了多个套接字选项属性,常用的包括SO_BACKLOG、SO_REUSEADDR、SO_KEEPALIVE、SO_RCVBUF、SO_LINGER和TCP_NODELAY。这些选项可以根据需求进行设置,例如SO_BACKLOG用于设置服务端接受连接的队列长度,SO_REUSEADDR允许重复使用本地地址和端口。
通过配置ChannelOption,可以优化网络连接的性能和稳定性。例如,在创建服务端Bootstrap对象时,可以设置SO_BACKLOG和SO_KEEPALIVE选项,并为每个子通道设置相应的选项。
ChannelFuture接口用于处理异步I/O操作的完成通知。通过addListener方法可以注册一个ChannelFutureListener,用于在操作完成时接收通知。例如,客户端连接服务端时,可以添加一个监听器,接收连接状态的变化。
ChannelFuture的方法包括alloc、bind、channel、close、connect、deregister、disconnect、executor、fireChannelActive、fireChannelInactive等。这些方法用于管理I/O操作和事件处理,确保异步编程的高效性和非阻塞性。
转载地址:http://tpcfk.baihongyu.com/