サーバーで2つのポートを開き、1つは本番用、2つは監視用、1つは別のサーバーへのtelnet用のクライアントを開きます。しかし、私のサーバーは、最大1日実行すると常に「多くの開いているファイル」への通知を受け取りました.私のコードは以下のようです:
ServerBootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
private PipelineServer ps= new PipelineServer(listenMessage1);
bootstrap.setPipelineFactory(ps);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("reuseAddress", true);
bootstrap.bind(new InetSocketAddress(server_port));
ServerBootstrap bootstrap2 = new ServerBootstrap( new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
private PipelineServer ps2 new PipelineServer(listenMessage2);
bootstrap2.setPipelineFactory(ps2);
bootstrap2.setOption("child.tcpNoDelay", true);
bootstrap2.setOption("child.keepAlive", true);
bootstrap2.setOption("reuseAddress", true);
bootstrap2.bind(new InetSocketAddress(server_port2));
ポート生成とポート監視の間の通信のための listenMessage1 と listenMessage2、ハンドラーのデコードとエンコードは StringDecoder() と StringEncoder() を使用します。しかし、プログラムが長時間実行された場合: 例: 1 日、ログに「多くの開いているファイル」が見つかり、サーバーに接続できません。
あなたの解決策をお願いします。ありがとう