`
iluoxuan
  • 浏览: 579777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ChannelGroup

 
阅读更多
public interface ChannelGroup
extends Set<Channel>, Comparable<ChannelGroup>
A thread-safe Set that contains open Channels and provides various bulk operations on them. Using ChannelGroup,
一个线程安全的Set容器提供对Channels的操作
you can categorize Channels into a meaningful group (e.g. on a per-service or per-state basis.) A closed Channel is
你可以把Channels归类为一个有意义的组,Channel的closed关闭会自动的从集合中移除整个Channel,
automatically removed from the collection, so that you don't need to worry about the life cycle of the added Channel. A Channel can belong to more than one ChannelGroup.
因此你不必担心一个Channel会同时属于不同的ChannelGroup

Broadcast a message to multiple Channels

广播一条消息到多个Channel

 

If you need to broadcast a message to more than one Channel, you can add the Channels associated with the recipients

如果你需要广播一条消息到多个Channel,你可以添加Channels 

and call write(Object):

 ChannelGroup recipients = new DefaultChannelGroup();
 recipients.add(channelA);
 recipients.add(channelB);
 ..
 recipients.write(ChannelBuffers.copiedBuffer(
         "Service will shut down for maintenance in 5 minutes.",
         CharsetUtil.UTF_8));
 

Simplify shutdown process with ChannelGroup

If both ServerChannels and non-ServerChannels exist in the same ChannelGroup, any requested I/O operations on the group are performed for the ServerChannels first and then for the others.

This rule is very useful when you shut down a server in one shot:

 ChannelGroup allChannels = new DefaultChannelGroup();

 public static void main(String[] args) throws Exception {
     ServerBootstrap b = new ServerBootstrap(..);
     ...

     // Start the server
     b.getPipeline().addLast("handler", new MyHandler());
     Channel serverChannel = b.bind(..);
     allChannels.add(serverChannel);

     ... Wait until the shutdown signal reception ...

     // Close the serverChannel and then all accepted connections.
     allChannels.close().awaitUninterruptibly();
     b.releaseExternalResources();
 }

 public class MyHandler extends SimpleChannelUpstreamHandler {
     @Override
     public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) {
         // Add all open channels to the global group so that they are
         // closed on shutdown.
         allChannels.add(e.getChannel());
     }
 }
 
分享到:
评论

相关推荐

    netty5_兼容tcp、websocket小例子 实现信息广播

    当有新消息需要广播时,遍历`ChannelGroup`并调用每个通道的`writeAndFlush()`方法,将消息发送给所有在线的客户端。 现在,让我们深入到实现细节: 1. 定义自定义的`ChannelInboundHandler`,用于处理接收到的TCP...

    纯Java的高性能长连接RPC解决方案.docx

    HSF框架的核心组件包括Channel、ChannelGroup、ChannelHandler等。 Channel是HSF框架中的一个基本概念,表示一个通道或连接。ChannelGroup是多个Channel的组合,提供了更好的管理和扩展能力。ChannelHandler是HSF...

    nettyserver3.zip

    private static final ChannelGroup allChannels = new DefaultChannelGroup(ImmediateEventExecutor.INSTANCE); @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { all...

    t-io百万级网络框架 v3.8.5.zip

    t-io框架主要包括Acceptor、NioEventLoop、ChannelGroup、Socket包装类等组件,它们协同工作,实现了网络通信的核心功能: 1. Acceptor:负责监听端口,接收新进来的连接请求。 2. NioEventLoop:作为事件循环,...

    aio.zip_netty_netty-socket

    ChannelGroup 是一个可以存储多个 Channel 的集合,它可以用来批量操作这些 Channel,例如广播消息到所有连接的客户端,或者在一组 Channel 中查找特定的 Channel。 此外,Netty 还有其他强大的特性,如零拷贝、...

    netty3 客户端 服务端聊天

    这样,当某客户端发送消息时,服务端可以通过 ChannelGroup 广播消息到所有其他客户端,实现多用户间的实时聊天。 总的来说,这个“netty3 客户端 服务端聊天”示例展示了如何利用 Netty 3 构建一个简单的聊天系统...

    Spring Boot 整合 Netty + WebSocket 实时消息推送

    当有新连接加入时,将其添加到ChannelGroup中,然后可以通过这个组向所有或部分客户端广播消息。这样就实现了多客户端之间的通信。 5. **安全性和认证**:在实际项目中,我们需要考虑WebSocket的认证和授权。Spring...

    基于netty的websocket即时聊天程序

    这可以通过ChannelGroup实现,它是一个包含多个Channel的集合,方便批量操作。而客户端则通过WebSocket连接发送消息到服务器,并监听WebSocket事件来接收新消息。 此外,为了保证系统的稳定性和健壮性,还需要考虑...

    基于netty的http-flv推流demo

    这可以通过ChannelGroup实现,它允许我们管理和操作一组Channel,方便地将数据推送给所有连接的客户端。 客户端方面,同样需要实现一个Netty的客户端应用,连接到服务器,接收并解析推流数据。客户端也需要识别FLV...

    netty4中文用户手册

    Netty支持通过优雅地关闭ChannelGroup中的所有Channel来关闭应用,确保在关闭过程中数据的完整性和连接的可靠性。 最后,手册建议用户阅读《Netty 实战(精髓)》来获取更深入的理解,并指出Apache MINA是另一个类似...

    netty_websocket示范网页聊天项目源码

    这可能涉及到 ChannelGroup 或其他并发工具的使用,以确保线程安全和性能优化。 6. **错误处理与日志**:为了保证系统的健壮性,项目可能包含异常处理和日志记录机制,以便在出现问题时能够及时发现和修复。 7. **...

    Telegram_Forwarder:使用电报机器人@heroku自动从ChannelGroup转发消息

    电报转发器一个运行在Python3上的简单的Telegram Python机器人,可自动将消息从一个聊天转发到另一个聊天。启动机器人设置数据库并完成配置(见下文)后,只需运行: python3 -m forwarder 或者您可以在上托管并运行...

    fmod最新api包含运行库.rar

    4. **播放声音**:创建一个通道组`FMOD::ChannelGroup`,然后通过`sound-&gt;play`方法播放声音,并将其分配到指定的通道组。这样可以方便地对一组声音进行统一控制,比如同时开启或关闭。 5. **控制和处理**:fmod ...

    深入浅出netty-3.rar

    - 线程安全:Netty提供了线程安全的数据结构和工具类,如ChannelGroup,用于管理和操作多个Channel。 8. **实战经验与最佳实践** - 异常处理:如何正确设置和处理ChannelHandler中的异常。 - 性能监控:通过...

    jboss netty5.0

    7. **线程模型**:Netty 的 EventLoop 和 ChannelGroup 机制简化了多线程编程,确保了高效的并发执行。 8. **可扩展性**:Netty 的模块化设计使得添加新功能或替换现有组件变得简单。 9. **文档和社区支持**:...

    Netty_chatroom.zip

    群聊则需要广播消息到所有在线用户,这可以通过维护一个ChannelGroup来实现,当有新消息时,向这个组内的所有成员发送。 5. **文件发送** 文件发送涉及二进制数据的传输。Netty提供了FileRegion类,可以方便地传输...

    TestFmod1.rar

    3. 创建并设置主通道组的音高:`FMOD::ChannelGroup *masterGroup; result = system-&gt;getMasterChannelGroup(&masterGroup); masterGroup-&gt;setPitch(pitch);` 4. 播放声音:`FMOD::Channel *channel = NULL; result ...

    Netty+3.1中文用户手册

    - **关闭应用**:正确的关闭顺序对于资源释放至关重要,Netty 提供了 ChannelFuture 和 ChannelGroup 等工具来帮助管理连接的生命周期。 - **总述**:总结 Netty 的核心概念和使用技巧,强调其在实际开发中的价值...

    netty源码解析视频

    - 通过`ChannelGroup`或`ChannelFutureListener`实现对多个`Channel`的操作管理。 - 可以方便地关闭所有连接或广播消息到所有客户端。 2. **自定义协议支持**: - 除了支持标准协议外,Netty还允许用户自定义...

    SpringBoot+WebSocket+Netty实现消息推送的示例代码

    在`NettyConfig`类中,我们创建了一个`ChannelGroup`,用于存储所有客户端的连接(channels),这样可以方便地向所有客户端广播消息。同时,我们还定义了一个`ConcurrentHashMap`来存储用户ID与对应channel的关系,...

Global site tag (gtag.js) - Google Analytics