org.jboss.netty.channel.group
接口 ChannelGroup

所有超级接口:
java.util.Collection<Channel>, java.lang.Comparable<ChannelGroup>, java.lang.Iterable<Channel>, java.util.Set<Channel>
所有已知实现类:
DefaultChannelGroup

public interface ChannelGroup
extends java.util.Set<Channel>, java.lang.Comparable<ChannelGroup>

一个包含打开通道和为通道提供各种各样批量操作的线程安全集合.使用ChannelGroup,你可以把通道分类到一个有意义的群组中(如. 基于每服务或每状态.) 一个已经关闭的通道会被自动的从集合中移除,所以你不需要担心已经添加到该集合的通道的生命周期.一个通道可以属于多个通道组.

广播一个消息到多个通道

如果你需要广播一个消息到多个通道,你可以添加关联的通道接受者并调用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));
 

使用ChannelGroup执行简单的关闭

如果同时有ServerChannel和非ServerChannel存在同一个ChannelGroup ,任何对该通道群组的请求I/O操作都会先执行ServerChannel,然后才是其他非ServerChannel.

该规则对于当你要关闭一个服务器时非常有用:

 ChannelGroup allChannels = new DefaultChannelGroup();
 
 public static void main(String[] args) throws Exception {
     ServerBootstrap b = new ServerBootstrap(..);
     ...
 
     // 启动一个服务器
     b.getPipeline().addLast("handler", new MyHandler());
     Channel serverChannel = b.bind(..);
     allChannels.add(serverChannel);
 
     ... 等待直到接收到关闭信号 ...
 
     // 关闭serverChannel和已接收的连接.
     allChannels.close().awaitUninterruptibly();
     b.releaseExternalResources();
 }
 
 public class MyHandler extends SimpleChannelUpstreamHandler {
     @Override
     public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) {
         // 添加所有打开的通道到全局的通道组以便它们可以在关闭服务器时被关闭.
         allChannels.add(e.getChannel());
     }
 }
 


方法摘要
 ChannelGroupFuture close()
          关闭该组所有通道.如果通道已经被连接到一个远程端或已绑定到一个本地地址,它会自动断开和取消绑定.
 ChannelGroupFuture disconnect()
          断开该组中所有通道连接
 Channel find(java.lang.Integer id)
          返回匹配指定整数ID的通道.
 java.lang.String getName()
          返回该通道组的名称.通道组名纯粹只是帮助你区分不同群组而已.
 ChannelGroupFuture setInterestOps(int interestOps)
          使用指定的interestOps为该通道组中所有的通道调用Channel.setInterestOps(int).
 ChannelGroupFuture setReadable(boolean readable)
          使用指定的标识为该通道组中所有通道调用Channel.setReadable(boolean).请注意该操作和 Channel.setReadable(boolean)一样是异步的.
 ChannelGroupFuture unbind()
          取消该组中所有通道的绑定.
 ChannelGroupFuture write(java.lang.Object message)
          写一个指定的消息到组中所有通道.如果指定的消息是一个ChannelBuffer实例,那么它会自动 使用复制以避免条件竞争.请注意该操作和 Channel.write(Object)一样是异步的.
 ChannelGroupFuture write(java.lang.Object message, java.net.SocketAddress remoteAddress)
          为指定的远程地址写一个指定的消息到组中所有通道.如果指定的消息是一个ChannelBuffer实例,那么它会自动 使用复制以避免条件竞争.请注意该操作和 Channel.write(Object,SocketAddress)一样是异步的.
 
从接口 java.util.Set 继承的方法
add, addAll, clear, contains, containsAll, equals, hashCode, isEmpty, iterator, remove, removeAll, retainAll, size, toArray, toArray
 
从接口 java.lang.Comparable 继承的方法
compareTo
 

方法详细信息

getName

java.lang.String getName()
返回该通道组的名称.通道组名纯粹只是帮助你区分不同群组而已.


find

Channel find(java.lang.Integer id)
返回匹配指定整数ID的通道.

返回:
如果找到,则返回匹配的Channel.否则返回null.

setInterestOps

ChannelGroupFuture setInterestOps(int interestOps)
使用指定的interestOps为该通道组中所有的通道调用Channel.setInterestOps(int). 请注意该操作和Channel.setInterestOps(int)一样是异步的.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

setReadable

ChannelGroupFuture setReadable(boolean readable)
使用指定的标识为该通道组中所有通道调用Channel.setReadable(boolean).请注意该操作和 Channel.setReadable(boolean)一样是异步的.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

write

ChannelGroupFuture write(java.lang.Object message)
写一个指定的消息到组中所有通道.如果指定的消息是一个ChannelBuffer实例,那么它会自动 使用复制以避免条件竞争.请注意该操作和 Channel.write(Object)一样是异步的.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

write

ChannelGroupFuture write(java.lang.Object message,
                         java.net.SocketAddress remoteAddress)
为指定的远程地址写一个指定的消息到组中所有通道.如果指定的消息是一个ChannelBuffer实例,那么它会自动 使用复制以避免条件竞争.请注意该操作和 Channel.write(Object,SocketAddress)一样是异步的.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

disconnect

ChannelGroupFuture disconnect()
断开该组中所有通道连接

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

unbind

ChannelGroupFuture unbind()
取消该组中所有通道的绑定.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture

close

ChannelGroupFuture close()
关闭该组所有通道.如果通道已经被连接到一个远程端或已绑定到一个本地地址,它会自动断开和取消绑定.

返回:
返回当该操作完成所有通道时能收到通知的ChannelGroupFuture