質問

いていのデスクトップアプリケーションでは、ファイルサーバ対応を心がける必要があることはできるファイル転送をご希望の方はリモートからのお客様は、通常にあるのと同じLAN)。があります多くのファイルをご要望のための小型のファイルです。サーバを提供できるのもアップロード及びダウンロードサービス

私は狭いずれparticual技術私ためのプログラミング言語、ツールの図書館にとっ走することができます。

最初は行くとC/C++を利用した実装Windowsソケットまたは使用において提供するサービス図書館など向(asioなど).いものと考えられているGimp用ドキュメは、ちょっとしていなどの特典付きの正当性、開発時間による学習されたものの翻訳であります。

後の編集:また、回答るいはFTPを利用またはHTTPでは基本的にはもって既に作成されているものを考えたのですが、書からあなたならどうする?

役に立ちましたか?

解決

頻繁に投稿しの小さなファイルのインターネットには想像もつかないを実装する独自プロトコルが、要する相当な仕事もい非標準、将来の統合がないと難しいだけを実装するプロトコルのクライアントだけます。を選択するかとにかく、これが私の提案のための簡単なプロトコル:

  1. コマンド:1バイトの特定かきを行います。(0x01アップロード要求、0x02ダウンロード要求、0x11アップロード対応0x12ダウンロードが対応します。
  2. ファイル名:できる固定サイズを先頭に付けバイトの長さを想定した名前は255バイト)
  3. チェックサムは、MD5のためのインスタンスがアップロードの申請-ダウンロード対応)
  4. ファイルサイズがアップロードの申請-ダウンロード対応)
  5. ペイロード(アップロードの申請-ダウンロード対応)

これが実施する上でのTCPソケットが開かれます。も利用できますUDP、コストの接続の確立がこの場合において伝送。

を決定する実施プロトコールこれらを実現するために、HTTP図書館のように国際化ファイルを含みがサーバ用の標準的なHTTPコマンドのように取得をダウンロードやアップロード。※このように保存しく作ることができるではダウンロード任意のwebブラウザです。

別性能向上のために利用してファイルリポジトリのファイルシステムがうSQLite.を作成でき単一テーブルを含むcharカラムのファイル名と一blobカラムのファイルの内容.以来、SQLiteは軽量なので効率的なキャッシュ、ほとんどの時間を避けるディスクアクセスオーバーヘッド。

いと仮定して必要なクライアント認証.

最後に:もC++でお好みだ原ネイティブコードの速いこのボトルネックにこのような願います。ほとんどがディスクアクセスネットワーク帯域幅。私もこれがJavaでしょうかを作ることができるわけであるサーブレットという同一のもふもふをご堪能ください(HTTP GETをダウンロード後のアップロード)100未満を行います。使ダービーの代わりにSQLiteこの場合、そのサーブレット任意のコンテナ(Tomcat,Glassfishなど)で行われます。

他のヒント

なぜだけではなく、 FTP に一緒に行きますか?あなたも任意の言語で、適切なサーバーの実装を見つけることができる、およびクライアントアクセスライブラリする必要があります。

これは、ホイール改革の多くのように聞こえます。確かに、FTPは理想的ではない、といくつかの奇妙なスポットを持っていますが、...それはあります、それは、よく知られている標準的だし、すでに非常に広く実装ます。

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

私は、FTP、またはSFTP、または他の接続指向の手法を使用しないようお勧めします。代わりに、コネクションレスのプロトコルや技術のために行く。

その理由は、あなたが小さなファイルの多くは、アップロードまたはダウンロード、および応答はできるだけ速くする必要がありますする必要があれば、あなたは設定と接続を破壊するコストを避けたい、ということです。

私は、既存の実装を使用したり、独自のHTTPまたはHTTPSサーバー/サービスを実装するのいずれかを見ていることを示唆しています。

おのボトルネックが来てから、以下の資料

  • ハードディスクI/OをWD velociraptorってランダムアクセス速度の約100MB/sとなります。また、重要であるかどうか設定し、そのRAID0,1,5またはかざる者.一部の読みの速で書きます。貿易-ロードします。

  • ネットワーク論I/O-したと仮定すると、あなたは最高速harddisksに高速なRAID設定を使用しない限りGbit I/Oネットワークにはログインが必要です。の場合パイプは大きなものなので、まだ提供する必要があります。

  • メモリキャッシュ-メモリ内のファイルシステムのキャッシュを大きくする必要があるのに十分なバッファーのすべてのネットワーク論I/Oないようにしまう。このままアクセスにはログインが必要メモリ量にはどんな仕事を探します。

  • ファイルシステムの構造をしたと仮定すると、あなたはギガバイトのメモリのボトルネックが、データ構造で使用するためのファイル-システム。の場合はファイルシステムの構成は煩雑なのです。

その他全ての問題は解決しない安心に使用しています。通知のほとんどのボトルネックを外部ソフトウェアます。そのため、コード、あるいはC/C++で使用や特定の図書館ではまだ翻弄されるので、OSやハードウェア

あなたは SFTP(SSH)サーバーを使用する必要がありますように

が鳴り、それは/ファイアウォールのNAT、安全・安心、そして既にあなたが欲しいものを行い、より多くの。また、より単純な実装のための共有SAMBAまたはWindowsのファイルを使用することができます。

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

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

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

は、アップロードのために、彼らはまた、スクリプトやカスタムモジュールと問題ありません - あなたはまた、認可を追加することができ、同様の方法で、

限り、あなたは動的に私はこれが最善の解決策の一つになると思いますファイルを追求する必要はありませんと。

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

1つのオプションは、マシン上のApache HTTP Serverをインストールし、その経由でファイルを提供することであってもよいです。アップロードとダウンロードに到達するためにPOSTを使用します。

クライアントがLAN内にある場合は、

あなただけのドライブを共有することができませんでした?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top