详谈ChannelGroup功能之一
详谈ChannelGroup功能之一
一一叶 发表于3年前
详谈ChannelGroup功能之一
  • 发表于 3年前
  • 阅读 90
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 本人根据netty-all-5.0.0.Alpha2的源码以及实例分析,得出的结论,如有不到之处还请多多指教 -------本篇适合有简单netty5基础的人阅读,

我们一步步走进netty5的源码

首先我们来看一下源码中带的实例源码

这是SecureChat这个实例中的SecureChatServerHandler中的channelActive的相关代码,

其次:我们来观看这个实例重点代码

    1>, extends SimpleChannelInboundHandler

    2>,static final ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

    3>, channels.add(ctx.channel());

其他的暂且不论

然后:我们来详细分析

    第一条说明是收信息的,进pipeline进行处理的,

    第二条,先看GlobalEventExecutor.INSTANCE,在源码中package io.netty.util.concurrent包内GlobalEventExecutor类中,第41行    public static final GlobalEventExecutor INSTANCE = new GlobalEventExecutor();可以看得很明白了。我研究了一下他的源码大致意思是这个类主要是全局事件处理的

    再看new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);在源码io.netty.channel.groupbao中DefaultChannelGroup的第60行是一个有参构造

    第三条,可以很明白 的知道是一个集合

最后:我在深入DefaultChannelGroup的源码,我们重点看一下几点

    1>extends AbstractSet<Channel> implements ChannelGroup 在源码中42行

    2>    private static final AtomicInteger nextId = new AtomicInteger();在源码中第44行

    3>public DefaultChannelGroup(EventExecutor executor) {

        this("group-0x" + Integer.toHexString(nextId.incrementAndGet()), executor);

    }在源码中60行

    4>

    public DefaultChannelGroup(String name, EventExecutor executor) {

        if (name == null) {

            throw new NullPointerException("name");

        }

        this.name = name;

        this.executor = executor;

    }在源码69行

    5> private final ConcurrentMap<ChannelId, Channel> serverChannels =                     PlatformDependent.newConcurrentHashMap();

    private final ConcurrentMap<ChannelId, Channel> nonServerChannels =     PlatformDependent.newConcurrentHashMap();在源码47行

我们可以看出DefaultChannelGroup是一个AbstractSet集合,实现了ChannelGroup ,并且使用了原子integer----->  AtomicInteger  结合第三可以看出ChannelId 是有框架自动生成的,也可以定制。在源码中始终没有一个返回map的方法,想用的话可以自己定义一个,但DefaultChannelGroup中的每一个方法都跟map有关,都是在操作map

总结:我们知道ChannelId是自动生成的,可以定制,这是一个喜讯,我们可以把我们相关的userId绑定,为我们做服务,自己在DefaultChannelGroup定义一个定义一个也可以,本人不推荐自定义map,但推荐定制ChannelId



   




共有 人打赏支持
粉丝 26
博文 21
码字总数 8193
×
一一叶
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: