ひとつのクライアントから複数の接続要求への対応

事象説明

    C++/VBクライアント使用時で、クライアントとサーバの間の回線が遅い/細い場合に、一つのクライアントから立て続けに複数の接続要求が発行されることがあります。これは、ObjectBroker C++クライアントのデフォルト設定では、3秒以内に接続が完了しない場合に次の接続要求を発行する、という処理があるためです。ここで例えば3回目の接続要求によりサーバとクライアントの間で接続が完了した場合、クライアントは3回目に成功した接続しか使用しませんが、サーバでは同じクライアントから3本の接続要求を受けたように動作します。最初の2つの接続はいずれクライアントかサーバで不要と気づいて切断するので、いつまでも不要な接続が残ることはありませんが、一時的に想定外の接続数となってしまうため、最大接続数超過のエラーが起きてしまうことがあります。

状況の確認方法

    sysmsg.trcでクライアントの接続/切断状況を確認します。通常、一つのクライアントマシンで一つのクライアントアプリケーションを動作させている場合には、アプリケーション起動時(もしくは最初の呼びだし時)に下記接続メッセージが出力され、アプリケーション終了時に下記切断メッセージが出力されます。

    TPS07-00103 TERMINAL CONNECTED. PLU:<ポート番号> TERMINAL NAME:<端末名> LID:IIOPLISTENER0007  (接続)
    TPS07-00107 TERMINAL DISCONNECTED. PLU: <ポート番号> TERMINAL NAME:<端末名> LID:IIOPLISTENER0007  (切断)
    
    本項の障害により一つのクライアントから複数の接続要求が発生している場合は、同じクライアント(TERMINAL NAME:に続くIPアドレスが同じもの)で短い時間に続けて接続メッセージが出力されます。

回避方法

    クライアントPCのレジストリで以下の設定を行ってください。
    場所HKEY_LOCAL_MACHINE\SOFTWARE\NEC\ObjectSpinner\1

    ConnectTimeout :

      文字列属性で作成してください。

      接続完了までにかかる最大待ち時間(単位:秒)を設定します。既定値は3(秒)です。実際の処理では設定MaxConnectRetry(既定値10)の値とConnectTimeoutの値をかけあわせたものになります。既定値では3 * 10 = 30秒となります。

    MaxConnectRetry :

      文字列属性で作成してください。

      接続を試みる回数を設定します。設定ConnectTimeoutとあわせて使用されます。既定値は10(回)です。

    上記デフォルト設定では、接続が3秒以内に完了しないと2つめの接続要求が発生してしまいます。これを例えばConnectTimeout=20、MaxConnectRetry=3とすることで問題の発生を抑えることができます。


関連情報