-1

Java サーバー/クライアント プログラムの設計を開始しました。潜在的に 100 のクライアントを持つ 1 つのサーバーがあり、クライアントは VPN 経由でサーバーに接続している別の国にある可能性があるため、ネットワーク帯域幅は理想的ではない可能性があります。典型的な使用法は、サーバーがジョブをクライアントにディスパッチし、クライアントが結果をサーバーに返すことです。ただし、サーバーとクライアント間で転送する必要があるデータはそれほど多くありませんが、おそらくジョブごとに約 10 KB であり、各ジョブには約 5-クライアントでの実行に 10 分。

設計には 2 つのオプションがあります。

1、クライアントがサーバーに登録しようとしているときにソケット接続の要求を開始すると、通信用のすべてのソケット接続が保持されます。

2、クライアントは登録のためにソケット接続を開始し、接続を閉じます。サーバーはクライアントのリストを維持し、サーバーはジョブのディスパッチ時に接続を開始してから閉じます。クライアントは接続を再開して結果を報告し、終了します。

問題は、パフォーマンスとコードの複雑さの点で、どちらのオプションがより優れた設計になるかです。

4

2 に答える 2

-1

多くの違いは見られません。その理由は、ネットワークで ICMP パケット (または TCP SYN/ACK) の転送に問題がある場合、全体的なパフォーマンスが低下するためです。

そのような問題がない場合、新しい接続設定のオーバーヘッドは無視できます。新しい接続に 15 秒かかる場合でも (これは非常に悪いことです)、全体的な時間の損失は次のようになります。

100% * 15 sec / 10 min * 60 sec = 2,5%

ただし、15 秒を必要とする小さなパケットがほとんどない場合は、既存の接続を使用してもメリットはありません。

もう 1 つの側面は、セキュリティです。クライアント ID の検証などで何らかの SSL (または別のネゴシエーション) を使用するセキュリティ プロトコルがある場合は、接続を維持する価値があるかもしれません。

ただし、インターネット (ローカル ネットワークではない) で長時間接続を維持することは、かなり信頼性に欠けるものです。したがって、組み合わせたアプローチを使用することができます。接続を維持しようとしますが、切断された場合 (または切断された場合) は、再接続/回復します。

于 2013-04-26T19:12:11.437 に答える