Netty - ChannelGroup 和 ArrayList 的区别

发布时间 2023-11-21 17:41:58作者: 炎黄子孙,龙的传人

一、Netty - ChannelGroup 和 ArrayList 有什么区别?

我正在使用 Netty 4.x,我想知道以下:ChannelGroup 和 ArrayList 之间有什么区别?

ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

ArrayList<Channel> channels = new ArrayList<>();

二、回答

ChannelGroup 基本上是一个“增强”列表。
使用普通的 Java 列表,您必须在通道关闭时手动取消注册通道,ChannelGroup 会为您完成此操作。
如果你想发送消息给每一个连上服务器的客户端,你需要手动循环一个普通的java列表,但是ChannelGroup有它自己的write方法。
比如:

ChannelGroup recipientsGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

// 向 Group 中每一个 channel 发送信息
recipientsGroup.writeAndFlush(Unpooled.copiedBuffer(
     "Service will shut down for maintenance in 5 minutes.",
     CharsetUtil.UTF_8));

使用 ChannelGroup 基本上可以让您的生活更轻松。
因为它带有许多实用方法,
来自 https://netty.io/4.0/api/io/netty/channel/group/ChannelGroup.html 的关闭示例:

recipientsGroup.close().awaitUninterruptically();

如果要在使用 ArrayList 时关闭所有通道,则需要循环所有通道,调用它们的 close 方法,然后再次循环并等待它们的关闭 future,确保在循环时永远不会修改列表。

ref