首页 > 其他分享 >Netty - ChannelGroup 和 ArrayList 的区别

Netty - ChannelGroup 和 ArrayList 的区别

时间:2023-11-21 17:45:21浏览次数:30  
标签:Netty ChannelGroup 列表 recipientsGroup new ArrayList

一、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

标签:Netty,ChannelGroup,列表,recipientsGroup,new,ArrayList
From: https://www.cnblogs.com/eddyz/p/17847158.html

相关文章

  • 用Netty实现一个简单全双工通信
    用Netty实现一个简单全双工通信​ 如题,需要注意在ByteBuf使用的过程中要使用buf.retain()保证buf引用计数大于0,才能够正常使用否则会报异常,原因是pipeline上的handler都是使用NIO线程执行的,因此使用buf的handler和tailhandler(最后调用bufrelease的handler)是不同的线程,因此是异......
  • Netty-操作篇
    服务端创建步骤步骤一:创建ServerBootstrap实例。步骤二:设置并绑定Reactor线程池。步骤三:设置并绑定服务端Channel。步骤四:链路建立的时候创建并初始化ChannelPipeline(非必须)。用于处理网络事件:1.链路注册、激活、断开、发生异常2.接收到请求消息3.请求消息接收并处理完毕......
  • Netty-基础篇(4)
    不使用Java原生NIO编程的原因1、NIO的类库和API复杂,使用麻烦2、需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程3、可靠性能力补齐,工作量和难度都非常大。例如客户端面临断线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题。4、JDKNIO的BUG,例如臭......
  • Netty源码学习4——服务端是处理新连接的&netty的reactor模式
    系列文章目录和关于我零丶引入在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel,ChannelHandler,ChannelPipeline。这一篇将学习服务端是如何构建新的连接。一丶网络包接收流程当客户端发送的网络数据帧通过网......
  • Netty-基础篇(2)
    ByteBuf——Netty的数据容器概念:Netty提供的字节容器,可以对字节进行高效操作,包括读写、查找等。数据处理组件1.abstractclassByteBuf2.interfaceByteBufHolderByteBufAPI的优点:1.它可以被用户自定义的缓冲类型扩展2.通过内置的复合缓冲区类型实现了透明的零拷贝3.容量......
  • 常见面试题-Netty线程模型以及TCP粘包拆包
    介绍一下Netty使用的线程模型?答:Netty主要基于主从Reactor多线程模型,其中主从Reactor多线程模型将Reactor分为两部分:mainReactor:监听ServerSocket,用来处理网络IO连接建立操作,将建立的SocketChannel指定注册给subReactorsubReactor:和建立起来的socket做数据交互和......
  • Netty-基础篇
    核心组件EventLoopGroup概念:由一个或多个EventLoop组成的组,用于处理所有的Channel的I/O操作,可以将其看作是一个线程池。1.包含多个EventLoop。2.EventLoopGroup将为每个新创建的Channel分配一个EventLoop。在每个Channel的整个生命周期内,所有的操作都将由相同的Thread执行。3......
  • netty tls单向认证通讯
    需求背景项目主要分为监管侧和企业侧,企业侧实时上传数据到云端,云端汇聚业务数据,上传过程需要保证传输的安全性。技术实现数据上传考虑到用HTTPS或者是TCP+TLS传输。其实使用HTTPS传输协议是比较简单的,但是项目硬件使用的4G无线网卡,而且需要实时检测设备运行状态,所以使用......
  • Netty - 快速开始
    一、为什么使用Netty1.NIO的缺点NIO的类库和API繁杂,学习成本高,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能写出高质量的NIO程序。臭名昭著......
  • 谈谈对ArrayList的理解以及扩容机制
     1.浅谈ArrayListArrayList类又称动态数组,同时实现了Collection和List接口,其内部数据结构由数组实现,因此可对容器内元素实现快速随机访问。但因为ArrayList中插入或删除一个元素需要移动其他元素,所以不适合在插入和删除操作频繁的场景下使用。ArrayList的容量可以随着元素的增......