netty在需要创建多个ChannelGroup的时候该如何如何设置线程池

zodal
  • 2
新手上路,请多包涵

问题描述

当用netty的ChannelGroup分组进行广播时,如果有多个组的话,在初始化ChannelGroup时参数中的EventExecutor该如何设置?是直接GlobalEventExecutor.INSTANCE让所有ChannelGroup公用同一个?还是说每个group再new一个,如果要给每个group分配不同的又该用哪个类?

问题出现的环境背景及自己尝试过哪些方法

正在写一个im应用,想用一个ChannelGroup对应一个群组的方式来实现向不同的群组发送不同的消息
但是完全搜不到有关创建多个ChannelGroup时该如何做的信息
大部分都是下么这样,只创建一个,然后直接向所有连接广播

 private static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

但是如果有多个组该怎么办?
还是说类似于下面这样自己去维护一个组和连接之间的关系,然后在广播时手动的去遍历一个组向其中的所有channel写入消息?

for(Channel ch:map.get(groupid)){
    ch.writeAndFlush(msg)
}



回复
阅读 7.6k
1 个回答
hhq
  • 1
新手上路,请多包涵

ChannelGroup的EventExecutor主要是用来异步通知使用的。

比如:ch.writeAndFlush(msg)是一个异步调用,调用后立即会返回一个ChannelGroupFuture,当异步操作完成,会使用EventExecutor来执行在ChannelGroupFuture里添加的那些Listener。

所以如果你的程序里没有大量回调,并且回调中都是很简单的非阻塞调用,使用GlobalEventExecutor.INSTANCE完全够用。

不过在Netty源码中,有大量的Future都是使用的这个Executor,所以我觉得自己new一个或者每次使用的时候从自己的EventGroup中拿一个

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏