详解Netty组件: Channel

本文详细介绍了Netty中的AbstractChannel构造及其主要方法,包括AbstractChannel的pipeline和parent属性。此外,还探讨了EmbeddedChannel在单元测试中的重要性,作为模拟真实通道进行处理器测试的高效工具,它避免了繁琐的服务器和客户端启动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 AbstractChannel构造

通道是Netty的核心概念之一,代表网络连接,由它负责同对端进行网络通信,既可以写入数据到对端,也可以从对端读取数据。

Netty通道的抽象类AbstractChannel的构造函数如下:

private final DefaultChannelPipeline pipeline;
private final Channel parent;

protected AbstractChannel(Channel parent) {
    this.parent = parent; // 父通道
    id = newId();
    // 新建一个底层的NIO 通道,完成实际的IO操作
    unsafe = newUnsafe();
    //新建一条通道流水线
    pipeline = newChannelPipeline();
}
复制代码
  • newUnsafe方法是具体的子类中实现,是个抽象方法

  • AbstractChannel内部有一个pipeline属性,表示处理器的流水线。Netty在对通道进行初始化的时候,将pipeline属性初始化为DefaultChannelPipeline的实例。表明每个通道都拥有一条ChannelPipeline处理器流水线。

AbstractChannel内部有一个parent父通道属性,保持通道的父通道。

  • 对于连接监听通道(如NioServerSocketChannel)来说,其parent属性的值为null;
   public NioServerSocketChannel(ServerSocketChannel channel) {
       // parent穿了一个null
     super(null, channel, SelectionKey.OP_ACCEPT);
     config = new NioServerSocketChann
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值