1

デスクトップ アプリケーションの一部として、(通常は同じ LAN 上にあるリモート クライアントからの) ファイル転送要求にできるだけ速く応答する必要があるファイル サーバーが必要です。小さなサイズのファイルに対するファイル要求が多くなります。サーバーは、アップロード サービスとダウンロード サービスの両方を提供できる必要があります。

私は特定のテクノロジーに固執しているわけではないので、Windows で実行できる限り、あらゆるプログラミング言語、ツールキット、ライブラリを受け入れることができます。

私の最初の試みは、Windows Sockets を使用した C/C++ 実装を使用するか、Boost (asio など) などのライブラリによって提供されるサービスを使用することです。Erlang についても考えましたが、習得する必要があるため、言語を習得する必要があるために開発時間が長くなっても、パフォーマンス上の利点が正当化されるはずです。

後の編集: FTP や HTTP、または基本的に既に作成されているものを使用するという回答に感謝しますが、それでもゼロから作成したい場合はどうしますか?

4

8 に答える 8

5

FTPを使用しないのはなぜですか? どの言語でも適切なサーバー実装とクライアント アクセス ライブラリを見つけることができるはずです。

それは多くの車輪の再発明のように聞こえます。確かに、FTP は理想的ではなく、奇妙な点がいくつかありますが、標準であり、よく知られており、すでに非常に広く実装されています。

于 2009-04-17T11:54:55.173 に答える
2

すべてのマシンが同じ LAN 上の Windows で実行されている場合、なぜサーバーが必要なのですか? 単純に Windows ファイル共有を使用しないのはなぜですか?

于 2009-04-17T11:56:56.243 に答える
2

FTP、SFTP、またはその他の接続指向の手法は使用しないことをお勧めします。代わりに、コネクションレスのプロトコルまたは手法を使用してください。

その理由は、多数の小さなファイルをアップロードまたはダウンロードする必要があり、応答をできるだけ速くする必要がある場合、接続のセットアップと破棄のコストを回避したいからです。

既存の実装を使用するか、独自の HTTP または HTTPS サーバー/サービスを実装することを検討することをお勧めします。

于 2009-04-17T12:01:19.027 に答える
2

ボトルネックは、次のいずれかの原因で発生する可能性があります。

  • ハードディスク I/O - WD velociraptor のランダム アクセス速度は約 100MB/s であると想定されています。また、RAID0、1、5 として設定するかどうかも重要です。読み込みは速いが書き込みは遅い人もいます。トレードオフ。

  • ネットワーク I/O - 高速 RAID セットアップで最速のハードディスクを使用していると仮定すると、Gbit I/O を使用しない限り、ネットワークは遅くなります。パイプが大きい場合でも、パイプにデータを提供する必要があります。

  • メモリ キャッシュ - メモリ内のファイル システム キャッシュは、速度が低下しないように、すべてのネットワーク I/O をバッファするのに十分な大きさである必要があります。それは、あなたが見ている種類の作業のために大量のメモリを必要とします.

  • ファイル システム構造 - ギガバイトに相当するメモリがあると仮定すると、ファイル システムに使用するデータ構造がボトルネックになる可能性が高くなります。ファイルシステムの構造が煩雑な場合、速度が低下します。

他のすべての問題が解決されたと仮定すると、アプリケーション自体について心配しますか。ボトルネックのほとんどは、ソフトウェアで制御できないことに注意してください。したがって、C/C++ でコーディングする場合でも、特定のライブラリを使用する場合でも、OS とハードウェアに翻弄されることになります。

于 2009-04-17T13:40:25.560 に答える
1

SFTP (SSH) サーバーを使用する必要があるように聞こえますが、これはファイアウォール/NAT で安全かつ安全であり、既に必要な機能を備えています。さらに単純な実装のために、SAMBA または Windows ファイル共有を使用することもできます。

于 2009-04-17T11:56:25.713 に答える
1

既存のものを使用しないのはなぜですか。たとえば、通常の Web サーバーは、多数の小さなファイル (画像) を非常にうまく高速に処理します。

そして、多くの人がすでにコードの最適化に時間を費やしています。

そして2つ目の利点は、確立されたプロトコルであるHTTPを使用して転送が行われることです。さらにセキュリティが必要な場合は、SSL に簡単に切り替えることができます。

アップロードについては、スクリプトやカスタム モジュールでも問題ありません。同じ方法で承認を追加することもできます。

ファイルを動的にシークする必要がない限り、これが最良のソリューションの 1 つになると思います。

于 2009-04-17T12:00:24.193 に答える
0

既存のデスクトップ アプリケーションの新しい部分ですか? サーバーの目標は何ですか?アップロード/ダウンロードされるファイルを保護し、認証および/または承認を提供していますか? アップロードを保存するための何らかの構造を提供しますか?

1 つのオプションとして、マシンに Apache HTTP Server をインストールし、それを介してファイルを提供することができます。POST を使用してアップロードし、GET を使用してダウンロードします。

クライアントが LAN 内にある場合、ドライブを共有することはできませんか?

于 2009-04-17T12:10:41.983 に答える