Nett源码剖析注册通道2021SC@SDUSC

本文深入剖析Netty注册通道的过程,从`initAndRegister`方法开始,详细讲解`config().group().register(channel)`的执行流程。通过`next()`获取EventExecutor,转化为EventLoop并调用`register(channel)`。接着分析了`promise.channel().unsafe().register(this, promise)`,包括判断条件、事件循环类型的检查以及`eventLoop.execute()`方法,最终理解线程的启动和注册通道的完成。" 117557517,10538009,小程序蓝牙通信丢包问题及解决方案,"['蓝牙通信', '物联网', '小程序开发', '数据处理']
摘要由CSDN通过智能技术生成

2021SC@SDUSC

在绑定端口过程中,类initAndRegister里有注册通道方法ChannelFuture regFuture = config().group().register(channel);
首先会发现

   public ChannelFuture register(Channel channel) {
   
        return next().register(channel);
    }

这里先分析next()

  public EventLoop next() {
   
        return (EventLoop) super.next();
    }
  public EventExecutor next() {
   
        return chooser.next();
    }
  public EventExecutor next() {
   
        return executors[Math.abs(idx.getAndIncrement() % executors.length)];
    }

最后他return的是一个EventExecutor 执行器,是一个workgroup里的某个子线程。然后转成了EventLoop对象
然后就是EventLoop对象的.register(channel)方法

public ChannelFuture register(Channel channel) {
   
        return register(new DefaultChannelPromise(channel, this));
    }
public ChannelFuture register(ChannelPromise promise) {
   
        ObjectUtil.checkNotNull(promise, "promise");
        promise.channel().unsafe().register(this, promise);
        return promise;
    }

将channel和自己EventLoop封装成DefaultChannelPromise对象后又调用了promise.channel().unsafe().register(this, promise);方法,这里的.channel().unsafe()都分别返回了channel和unsafe,关键在register

 public final void register(EventLoop eventLoop, final ChannelPromise promise) {
   
            if (eventLoop == null) {
   
                throw new NullPointerException("eventLoop")</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值