che*_*gpc 8 java networking netty
我使用netty示例代码 - telnet数据包,现在代码可以建立服务器和客户端使用telnet聊天,但客户端只能与服务器通信.我正在重写它以使客户端可以与所有客户端通信,因此我需要保留一个通道列表,因此当客户端联系服务器时,服务器可以将消息发送给所有客户端.谁能告诉我怎样才能让所有客户通道?(示例代码在此处输入链接描述)
HCa*_*sko 11
对于Netty 4.0.X
在主类中,您需要声明ChannelGroup对象:
final ChannelGroup channels =
new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
Run Code Online (Sandbox Code Playgroud)
连接新客户端时(应将构造函数中的channels对象传递给处理程序类):
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
channels.add(ctx.channel());
}
Run Code Online (Sandbox Code Playgroud)
要获取所有客户端,只需迭代通道对象:
for (Channel ch : channels) {
//do something with ch object
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
毛里西奥的建议很好.此外,Netty API已经在ChannelGroup中提供了一个通道容器.它是线程安全的,还提供了一些附加功能,例如对所有包含的通道进行组操作,以及在关闭时自动删除包含的通道.来自javadoc:
一个线程安全的Set,包含开放的Channel并对它们提供各种批量操作.使用ChannelGroup,您可以将频道分类为有意义的组(例如,基于每个服务或每个状态.)封闭的频道会自动从集合中删除,因此您无需担心频道的生命周期.添加频道.频道可以属于多个频道组.
在channelConnected事件中,从ChannelHandlerContext中获取客户端并将其存储在某个地方(并发集合会很好,比如ConcurrentHashMap)。您还必须实现channelClosed方法以从集合中删除断开连接的通道。
| 归档时间: |
|
| 查看次数: |
14220 次 |
| 最近记录: |