通过使用DefaultChannelGroup来存储您的频道,可以很容易地实现第一个要求。假设ChannelHandler
接受传入连接的 是 a singleton
,那么您可以使用以下代码。
// initialize channelgroup in your singleton handler
ChannelGroup ALL_CONNECTIONS = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
...
@Override
public synchronized void channelActive(ChannelHandlerContext ctx) throws Exception
{
if(ALL_CONNECTIONS.size() > 100){
ctx.channel().close();// dont accept further connections
}else{
ALL_CONNECTIONS.add(ctx.channel());
// do whatever logic.
}
}
我认为您正在考虑第二个要求的“连接池”。如果是这样,我认为这不是一个好主意。因为,当一个新客户端“连接”到您的服务器时,它始终是一个新连接,因为它来自您的网络外部。但是我不确定这一点,有更多知识的人可以回答。