netty在需要创建多个ChannelGroup的时候该如何如何设置线程池
问题描述
当用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)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ChannelGroup的EventExecutor主要是用来异步通知使用的。
比如:ch.writeAndFlush(msg)是一个异步调用,调用后立即会返回一个ChannelGroupFuture,当异步操作完成,会使用EventExecutor来执行在ChannelGroupFuture里添加的那些Listener。
所以如果你的程序里没有大量回调,并且回调中都是很简单的非阻塞调用,使用GlobalEventExecutor.INSTANCE完全够用。
不过在Netty源码中,有大量的Future都是使用的这个Executor,所以我觉得自己new一个或者每次使用的时候从自己的EventGroup中拿一个