0
A
回答
1
最简单的方法是写自己的处理程序,其对连接的客户端在静态整数。
事情是这样的:
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
@Sharable
public class ConnectionCounter extends ChannelInboundHandlerAdapter {
private static int connections = 0;
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
if(connections < 4) {
connections++;
super.channelActive(ctx);
} else
ctx.close();
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
super.channelInactive(ctx);
connections--;
}
}
编辑
你应该记住,你必须使用一个线程,否则可能会导致一些问题(竞争状态)。如果必须使用多个线程,则将int更改为AtomicInteger或使用static int中的synchronized关键字。
1
您不能配置netty来限制传入连接的数量。但是,您可以在打开后关闭超出限制的连接。 有几种方法可以实现这一点。
第一个将如上例所示。您需要在流水线开头添加ConnectionCounter
处理程序。但是,你需要使用AtomicInteger
代替int connections
并增加检查前的柜台(以避免竞争状态的问题):
@Sharable
public class ConnectionCounter extends ChannelInboundHandlerAdapter {
private final AtomicInteger connections = new AtomicInteger();
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
int val = connections.incrementAndGet();
if (val <= 4) {
super.channelActive(ctx);
} else {
ctx.close();
}
}
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
super.channelInactive(ctx);
connections.decrementAndGet();
}
}
P. S.心目中这个处理器是可共享的,你只需要创建1它的实例。否则,您需要使connections
字段静态。
另一种选择是使用单线程EventLoop
。当你想到只有4个连接 - 他们可以很容易地用1 EventLoop
处理:
new ServerBootstrap().group(bossGroup, new EpollEventLoopGroup(1));
因此你只有你可以使用上面的ConnectionCounter
处理程序代码,但没有AtomicInteger
1个工作者线程。
而最后的选项是 - DefaultChannelGroup
。但是,它内部使用ConcurrentMap<ChannelId, Channel>
。因此,您可以按照与ConnectionCounter
处理程序相同的方式来实现它。
相关问题
- 1. ubuntu的最大并发连接数?
- 2. Chromium最大并发HTTP连接数
- 3. 最大并发连接数Azure Django
- 4. 并发连接的最大数量jBoss
- 5. Azure函数设置最大并发性
- 6. 如何让并发连接的最大数目是一个IE8
- 7. 如何增加Apache中的最大并发连接数?
- 8. 在MySQL中,如何更改并发连接的最大数量?
- 9. 如何设置驼峰Http组件的最大连接数
- 10. Oracle 10g中的最大并发连接
- 11. 如何使用.NET中的ThreadPool设置并发运行的最大线程数
- 12. 来自任何机器的最大并发连接数
- 13. 连接到SQL Server 2008的最大并发用户数量
- 14. 如何设置Oracle连接池大小?
- 15. 最大连接数
- 16. 最大连接数
- 17. 如何限制ASP.NET WebAPI中的最大并发连接数/请求数/会话
- 18. mysql总是使用最大连接数
- 19. 如何在驼峰缓存中设置最大并发请求
- 20. 如何设置的BasicDataSource最大池大小或连接大小Spring框架
- 21. Netty连接池
- 22. 每个主机Alamofire的最大并发Http连接数?
- 23. Windows并发tcp/ip连接的最大数量是多少?
- 24. 并发TCP/IP连接的最大数量 - Win XP SP3
- 25. Node.js - Socket.io - “最大并发连接数”问题
- 26. orientdb上的最大并发连接数2.1.11
- 27. ms访问的最大并发连接数
- 28. 可能在BlazeDS的最大并发连接数
- 29. 如何使用设置好的变量Config.groovy中并连接它
- 30. 在瘦服务器上设置最大连接数?
根据这个答案:https://stackoverflow.com/a/19045001/5515060,它不可能 – Lino
好吧...我会尝试其他的东西。谢谢 – Papaya