答えて
最も簡単な方法は、静的な整数に接続されたクライアントをカウントし、独自のハンドラを記述することです。このような
何か:
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--;
}
}
EDIT
あなたはそれ以外の場合は、いくつかの問題(競合状態)を引き起こす可能性のあるスレッドを使用する必要が念頭に置いておく必要があります。複数のスレッドを使用する必要がある場合は、intをAtomicIntegerに変更するか、static intでsynchronizedキーワードを使用します。
着信接続数を制限するように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. grpcで最大同時接続数を設定するには
- 2. Node.jsで最大HTTPクライアント接続を設定する方法
- 3. ブラウザでの最大同時接続数
- 4. MySQLへの最大同時接続数
- 5. Chromium同時HTTP接続の最大数
- 6. ASP.NETコア最大同時接続数?
- 7. Nugetの同時接続の最大数を制限する方法は?
- 8. nodejsエクスプレスウィンドウの最大接続設定
- 9. ロールごとの同時ユーザー・セッションの最大数を設定する方法
- 10. Cassandra DatastaxとJava - 接続を設定する最良の方法
- 11. ラクダのための最大接続を設定する方法Httpコンポーネント
- 12. ホストごとの最大同時Http接続、Alamofire?
- 13. postgresへの接続方法sqlalchemyとの最大接続?
- 14. Python環境で最大ユーザー接続を設定する方法は?
- 15. RPCの最大同時接続は何ですか?
- 16. 春の起動時にnettyを設定する方法2
- 17. キャメルキャッシュで最大同時実行要求を設定する方法
- 18. 同時のJMS接続の上限数を設定するWeblogic
- 19. node-postgres:最大接続プールサイズを設定する
- 20. Oracle 10gでの同時接続最大数
- 21. 同時ジョブの最大数を設定するQuatz.Net
- 22. tomcatの最大ロール数と最大ログサイズの設定方法は?
- 23. OpenSSLは最大接続数を設定します
- 24. ブートストラップで最小幅と最大幅を設定する方法
- 25. ベストプラクティスと、モカテストのデータベース接続を設定する最も効率的な方法
- 26. 2つのサーバー間で同じドメインの最大同時http接続
- 27. Signalrハブに接続するNettyクライアントをコーディングする方法は?
- 28. バーチャルWi-Fi接続/クライアントの最大数のレジストリ設定?
- 29. netty 5.0で多数の接続を作成する方法
- 30. Azure関数による最大同時実行数の設定
この回答によると:https://stackoverflow.com/a/19045001/5515060、オーケー – Lino
そのことはできません...私はそう何か他のものを試してみましょう。ありがとうございました – Papaya