Tips

リモートモードタイムアウトはルーターのタイムアウトを上回ってはいけない

日付2010/12/06
ID76197 (英語原文参照)
バージョンv11
プラットフォームMac/Win

Set Database Parameter(Idle connections timeout) で設定できるアイドル接続タイムアウトは, 4D Serverと4D Clientの間に介在するルーターデバイスのタイムアウトよりも短い間隔(少ない値)であるべきですが, Set Database Parameter(4D Remote Mode Timeout) および Set Database Parameter(4D Server Timeout) で設定できるリモートモードタイムアウトにも同じことがあてはまります。これらの設定値は, サーバーとクライアントの間で交わされるパケットのタイムアウトに使用されているからです。

たとえば, リストフォームを開いたまま10分間クライアントを放置し, その後, レコードをダブルクリックしたところ, 「レコードをロードすることができませんでした」エラーが発生するかもしれません。テスト環境では, Netgear WNR3500Lルーターにv24 sp2 (SVN Revision 14826M NEWD-2 K2.6 Eko) of DD-WRTを使用し, TCPタイムアウトを180秒に設定し, アイドル接続タイムアウトを30秒に設定(正負両方の値をOn StartupとOn Server Startupでそれぞれ実行)したのにも関わらず, そのようなエラーが発生しました。

原因は, リモートモードタイムアウトが4分に設定されており, ルーターのタイムアウトを上回っていたために, 生命維持パケットが送信される前に接続が閉じられたことにありました。

ネットワークタイムアウトは, 環境設定ダイアログまたはSET DATABASE PARAMETERコマンドで設定することができます。この値は, 4D preferences.xmlに記録されているので, マシン毎のものであり, そのマシンで実行されるすべてのデータベースに共通です。逆に, 設定値はサーバーとクライアントで別々になる可能性があります。

ネットワークタイムアウトが未設定のマシンの値は2分です。サーバーとクライアントは, 設定された間隔でパケットを相手に対して送信し, 相手の反応を待ちます。反応のない相手は存在しないものと判断し, 接続が閉じられます。タイムアウトパケットを交換する際, それぞれは両者のタイムアウトでより少ない値(短い間隔)に自身のタイムアウトを更新します。つまり, 10分のサーバーに2分のクライアントがパケットを送信すると, サーバーのタイムアウトは2分になります。

ネットワークタイムアウトは, パケットの送信間隔でもあることに注目してください。間隔がルーターのタイムアウトよりも短いものであれば, 必然的にTCPの非活動時間が更新されるので, 意図に反してルーターにTCPソケットが閉じられることはありません。