2011-07-11 22 views
1

次はシナリオです: 私はXMLRPC-C++アプリケーションを持っており、PORT = 8081で接続を待ち受けています。それは次のようXMLRPC-Cライブラリを使用して、アビスサーバーを実装します。複数の接続を処理する方法XMLRPC - C++のAbyss Server

xmlrpc_c::serverAbyss myAbyssServer(
     myRegistry, //handler of methods 
     port,  //8081   
     "xmlrpc_log" 
     ); 

私は多くのXMLRPCのメソッドを呼び出すスクリプトから複数の接続を作成するときに、それが正常に動作します。 スクリプトは次のようなものです。 Script1: rpc.method1(parameters); rpc.method2(parameters); rpc.methodN(parameters);

このスクリプトが実行されているときにnetstatとxmlrpc_logで接続をチェックすると、出力はXMLRPC-SERVER:8081 XMLRPC-CLIENT:SOME TIME_WAITのようなものになります。 XMLRPC_CLIENT IPは同じですが、非常にrpc.methodコールは新しい接続を作成します。

同じクライアントで2つのスクリプトを実行すると問題が発生します。つまり、同じスクリプト内のrpc.methodM(パラメータ)は、同じクライアント内の他のスクリプトのrpc.methodN(パラメータ)と同時に実行されます。 これにより、サーバーにクラッシュが発生し、XMLRPC-SERVERはプロセスを再起動するまで停止します。

私はAbyssヘルプを読んでおり、runOnce()メソッドは役に立ちません。デフォルトでは、上記のようにコンストラクタを呼び出すと、AbyssサーバのMaxConnectionsはデフォルトで30、タイムアウト15セグです。

このクラッシュを回避するための設定はありますか?同時に複数のクライアントと複数の接続を同時にサポートする必要があります。これに関連した任意の助け

おかげで、敬具

、 Luchux。

答えて

0

明らかにサーバーは複数の接続を処理しており、pthreadを使ってマルチスレッドをサポートしています。問題は、RPC呼び出しによって実行される私のコードでなければなりません。リエントラント/スレッドの安全上の問題のためです。

  • 他のプロジェクトでいくつかのブレークを行った後、私はこのコードに戻ってきましたが、問題は再入可能な方法ではなく、自然言語ライブラリにありました。彼らはそれを解決した、私はそれを解決しました:) -