《Netty深入剖析》一、二:Netty基本组件和Netty服务端启动

本文深入剖析了Netty的基本组件,包括NioEventLoop、Channel、ByteBuf、Pipeline和ChannelHandler,并详细阐述了Netty服务端的启动流程,包括创建服务端Channel、初始化、注册selector和端口绑定等步骤。通过分析,揭示了NioServerSocketChannel与NioSocketChannel的创建差异以及在何时何地触发accept连接。
摘要由CSDN通过智能技术生成

1 Netty基本组件

1.1 网络通信之Netty模型

在这里插入图片描述

  • NioEventLoop

NioEventLoop#run方法对应着Bio的while(true)轮询,里面存放业务逻辑代码;
对应着两个Thread:一个是服务端的监听,一个是对客户端的读写

用法:
创建两个NioEventLoopGroup,一个bossGroup一个workerGroup;
bossGroup是服务端的监听,,workerGroup是对客户端的读写;
bossGroup处理完连接请求后,会将这个连接提交给workerGroup来处理

  • Channel

Channel则对应着Socket,服务端底层是NIO的ServerSocketChannel,客户端是自封装的NioSocketChannel;
程序由始至终只有一个NioServerSocketChannel;
每个连接生成一个NioSocketChannel 对象

  • ByteBuf

ByteBuf则对应着IO读写;

  • Pipeline

Pipeline则对应着业务逻辑链(Logic Chain),即while(true)里面的代码;是一个链表

问题:什么时候将Pipleline加入到每一个客户端连接的处理过程?
观看其构造方法源码可以得知,在创建NioSocketChannel的过程中加入的;
NioSocketChannel组合了Pipeline,new了一个DefaultChannelPipeline:

protected DefaultChannelPipeline(Channel channel) {
   
    this.channel = ObjectUtil.checkNotNull(channel, "channel");
    succeededFuture = new SucceededChannelFuture(channel, null);
    voidPromise =  new VoidChannelPromise(channel, true);

    tail = new TailContext(this);
    head = new HeadContext(this);

    head.next = tail;
    tail.prev = head;
}
  • ChannelHandler

对应着一个业务逻辑(Logic),会加入到Pipeline中;
接口定义了许多被添加进Pipeline后的回调方法,如handlerAdded等

2 Netty服务端启动

案例代码:

public final class Server {
   

    public static void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值