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

发布于 2022-09-11 14:29:46 字数 648 浏览 36 评论 0

问题描述

当用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小猫一只 2022-09-18 14:29:46

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文