0

多くのファイルの転送を調整するシステムがあるとしましょう。つまり、大規模な分散システム上でファイルの同期を制御する Indy TCP サーバーを使用しています。

現在、特定のクライアントにファイルを送信するには、サーバーのコンテキスト リストをロックする必要があります。

500 台のクライアントがすべて接続され、同期が行われている場合、このロックはすべてのクライアント接続スレッドを停止するため、パフォーマンスにかなりのコストがかかると思われます。

これをスピードアップする方法はありますか、それとも実際には問題ではありませんか? 多くのサーバーにクライアントを分散する価値はありますか? トリックは何ですか?

乾杯、 エイドリアン

4

2 に答える 2

1

ファイルを送信するためだけに Contexts リストをロックする必要はありません。OS にファイルのロックを処理させます。ファイルをクライアントに送信するときは、クライアントにファイルを読み取り専用モードで開いてもらいます。これにより、複数のクライアントが同じファイルから同時に読み取ることができます。クライアントがファイルをアップロードしている場合は、ファイルを排他モードで開いて、アップロードが完了するまで他のクライアントがファイルにアクセスできないようにします。

于 2012-07-28T18:42:59.210 に答える
0

クライアントが常に接続されている場合は、接続が終了するまでループで実行されるOnExecuteメソッドを使用して、データが使用可能になったときにクライアントにデータを送信できます。ただし、これにはプロトコルが管理下にある必要があります。

ロックリストを回避する方法を示す関連する質問と詳細な回答は、次の場所にあります。

OnExecuteイベントのないTCPserver

于 2012-07-28T10:27:50.040 に答える