2011-06-26 19 views
1

私はサーバーへの非ブロッキング接続を実行しています。ノンブロッキング接続タイムアウト

で使用する適切なタイムアウト値は、サーバーダウン/ビジーを考慮するとを選択してください。

P.S.

サーバーがダウンしているかビジー状態であるため、Connectが失敗する可能性があります。

サーバがダウンしている場合は、常に選択タイムアウトで終了します。

さらに興味深いのは、サーバーがビジー状態の場合です。 TCPハンドシェイクにはIMHOで1秒で十分です。サーバーに接続するのに時間がかかりすぎると、サーバーとのすべての通信が遅れることになります。だからそれは合理的な決定を選択して最大1秒を待つだろうか?

+0

私は10秒を使います。 –

+1

この質問には明確な答えはありません。私はこれがあなたのせいだとは思わない、それはちょうど非常に困難な問題であり、あなたのために働く価値を見つけるためには試行錯誤をしなければならない。 –

答えて

2

パケットが失われる可能性があります。この場合、ノードはタイムアウト後に再送信するため、ハンドシェイクに十分な値を使用しないでください。 tcpdumpでちょっと遊んで、接続を解除して(イーサネットケーブルを外して)、何が起きているのかを確認できます。

10-20秒のようなものは問題ありませんが、これはあなたの仕事がどれほど重要であるかによって決まります。

0

それはあなた次第ですが、10-20秒のようなものは妥当なタイムアウトになると思います。

Apache's default KeepAliveTimeout is 15 secondsだから、あなたが使用できる標準の1つです。

+0

私は彼らが他のタイムアウトについて話していると思います。「サーバーが永続的な接続で後続のリクエストを待つ時間」。 – dimba

+0

@dimba:彼らは同じものではありませんが、リモートマシンへのリクエストでは両方ともタイムアウトしているので、同じ球場にいます。 –

1

サーバーへの接続はほぼ直ちに行う必要があります。私はこれが幾分主観的かもしれないと思うが、数秒で十分であるはずだ。最近のいくつかの作業では、10秒間を使用しましたが、これはすべてのケースを検出しました。