シナリオは次のとおりです。XMLRPC-C++ アプリケーションがあり、PORT=8081 で接続をリッスンしています。次のようにxmlrpc-cライブラリを使用して、アビスサーバーを実装します。
xmlrpc_c::serverAbyss myAbyssServer(
myRegistry, //handler of methods
port, //8081
"xmlrpc_log"
);
多くの XMLRPC メソッドを呼び出すスクリプトから複数の接続を作成すると、問題なく動作します。スクリプトは次のようなものです: Script1: rpc.method1(parameters); rpc.method2(パラメータ); rpc.methodN(パラメータ);
このスクリプトの実行中に netstat と xmlrpc_log でサーバーの接続を確認すると、出力は XMLRPC-SERVER:8081 XMLRPC-CLIENT:SOME TIME_WAIT のようになります。XMLRPC_CLIENT IP は同じですが、rpc.method 呼び出しの前に新しい接続が作成されます。
この問題は、同じクライアントでこのスクリプトを 2 つ実行すると発生します。これは、1 つのスクリプトの呼び出し rpc.methodM(parameters) が、同じクライアント内の別のスクリプトの rpc.methodN(parameters) と同時に実行されることを意味します。これによりサーバーでクラッシュが発生し、XMLRPC-SERVER はプロセスを再起動するまで停止したままになります。
Abyss のヘルプを読みましたが、runOnce() メソッドは役に立ちません。デフォルトでは、上記のようにコンストラクターを呼び出すと、デフォルトの MaxConnections は 30 で、Abyss サーバーのタイムアウトは 15 セグメントです。
このクラッシュを回避するための構成はありますか? 同時に複数のクライアントをサポートし、多数の接続を同時にサポートする必要があります。
これに関連するヘルプをありがとう、
よろしくお願いします、ルチュクス。