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