C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: FTPでファイル転送を効率化する方法


(過去ログ 61 を表示中)

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■34904 / inTopicNo.1)  FTPでファイル転送を効率化する方法
  
□投稿者/ アキ (1回)-(2009/04/13(Mon) 23:58:52)

分類:[Java] 

いつも拝見させて頂いております。
さて困ったことがありまして、お知恵をお借りしたく投稿させて頂きます


現在、FTPでファイル(テキスト、画像を100個ずつ)をサーバに転送しています。
ファイルは1つずつ転送し、サーバからレスポンスが返ってきたら
次のファイルを転送する、といった処理を行っています。
ファイル転送(FTP)の速度を上げるにはいかようにすればよろしいでしょうか?


また一つ考えたのですが、それはテキストと画像を転送するソケットを各作成して、FTP転送するといった処理です。
しかしながらサーバ側のFTPになにか設定はいるものかどうか分からず挫折しました。
(そもそも早くなるかどうかわかりませんが。。。)

以上、よろしくお願いします。



引用返信 編集キー/
■34905 / inTopicNo.2)  Re[1]: FTPでファイル転送を効率化する方法
□投稿者/ 倉田 有大 (552回)-(2009/04/14(Tue) 00:32:33)
>また一つ考えたのですが、それはテキストと画像を転送するソケットを各作成して、FTP転送するといった処理です。

??どういう意味かわかりません。同時にリンクを張ると言うことでしょうか?
FTPプロトコル使う限り、一個一個転送するしかないんじゃないかな。

引用返信 編集キー/
■34906 / inTopicNo.3)  Re[2]: FTPでファイル転送を効率化する方法
□投稿者/ 囚人 (342回)-(2009/04/14(Tue) 00:55:24)
コネクションを同時にいくつも作成し、並列に処理すれば良いと思います。
ただし、無限に(ファイル数と同一のコネクション)を作成してしまうと逆にレスポンスが悪くなる可能性は十分にあります。そもそもあまりに多くの接続自体出来ない場合もあります。

数個〜10個ぐらいのコネクションを用意し、それをプールして使い回すのが良いのではないでしょうか。
引用返信 編集キー/
■34907 / inTopicNo.4)  Re[1]: FTPでファイル転送を効率化する方法
□投稿者/ オショウ (153回)-(2009/04/14(Tue) 01:18:52)
> 現在、FTPでファイル(テキスト、画像を100個ずつ)をサーバに転送しています。
> ファイルは1つずつ転送し、サーバからレスポンスが返ってきたら
> 次のファイルを転送する、といった処理を行っています。
> ファイル転送(FTP)の速度を上げるにはいかようにすればよろしいでしょうか?

  送信側は受信側レスポンスに依存されますので、高速化したい場合
  受信側(サーバー?)のCPU負荷に対し余裕があるのかどうか。

  仮に可能だったとして・・・

  私もやったことあります。
  転送するクライアント側をクラス化して、それを複数スレッド起動
  し、各々のスレッドから最大100ファイルを送信させる・・・

  1スレッドで、1ファイル平均15KBのバイナリファイルを540ファイル
  送信させる場合と、6スレッドで90ファイルづつ送信させる場合とで
  時間計測した結果・・・

  1スレッドでは、540ファイル送信させるのに1分強かかりました。
  が、6スレッドでは、なんと約9秒で終了〜
  FTPでのコマンド送受信に対する時間的コストが大きいかと思わ
  れます。

  また、FTPサーバーのパッシブモード・アクティブモード設定に
  も影響されます。

  尚、サーバー側CPU負荷は
  1スレッド時ほぼ変化せず。
  6スレッド時約15%平均まで増大
  Windows2000 Server メモリ2GB・SCSIタイプHDD
  CPUは、Pentium3 Xeon 1.8 GHzだったように・・・
  当然、FTPサーバーは、IISを使用(デフォルトで使用)

  ギガビットネットワーク行いましたが、パケット長や混み具合によっ
  て変化します。1スレッド中、何ファイル送るかはテストが必要かと。

  ビッグパケット使えるなら(ギガハブ仕様・ネットワークカード仕様依存)
  CPU負荷は下がるかもしれません。(転送時間は最高6秒まで短縮)

※ 540ファイルを転送するクライアントマシンを最大5台で同時に実施
  CPう負荷は最悪でも50%超えず。ただ転送時間は、約15秒程度/1台

以上。参考まで
引用返信 編集キー/
■34908 / inTopicNo.5)  Re[2]: FTPでファイル転送を効率化する方法
□投稿者/ オショウ (154回)-(2009/04/14(Tue) 01:25:04)
>   CPUは、Pentium3 Xeon 1.8 GHzだったように・・・

  Pentium3 Xeon は、900MHzが最高スペック・・・
  違ったようです。はて何だったか・・・

  Xeon ではなく、Pentium4 ?だったか・・・

  手元にマシン無いので不明です。
  OSその他には間違いありません。
  あしからず・・・

以上。
引用返信 編集キー/
■34909 / inTopicNo.6)  Re[2]: FTPでファイル転送を効率化する方法
□投稿者/ 倉田 有大 (553回)-(2009/04/14(Tue) 02:15:39)
>   1スレッドで、1ファイル平均15KBのバイナリファイルを540ファイル
>   送信させる場合と、6スレッドで90ファイルづつ送信させる場合とで
>   時間計測した結果・・・
>
>   1スレッドでは、540ファイル送信させるのに1分強かかりました。
>   が、6スレッドでは、なんと約9秒で終了〜
>   FTPでのコマンド送受信に対する時間的コストが大きいかと思わ
>   れます。

お、なるほどー、これは参考になるなー
クライアントの実装は簡単そうだけど、FTPサーバー選ばないのかな。
引用返信 編集キー/
■34910 / inTopicNo.7)  Re[3]: FTPでファイル転送を効率化する方法
□投稿者/ オショウ (155回)-(2009/04/14(Tue) 03:04:28)
> お、なるほどー、これは参考になるなー
> クライアントの実装は簡単そうだけど、FTPサーバー選ばないのかな。

  FTPクライアントクラスは、.NETランタイムのFTP機能を
  使ってません。

  ソケット通信で行えるよう作ってます。
  因みに、パッシブ・アクティブモード両対応でUNIX系FTP
  とIISのFTPに当然対応。

  ただし、IISでは、UNIX形式に設定してます。
  MS-DOS形式のディレクトリ一覧の情報解析が邪魔くさかっ
  たので、対応してませんが、時間があれば実装できます。
  RegExの正規表現文字列を作り直して、形式判断入れてやれば、
  OK〜

  尚、当然、非同期ソケットです・・・
  ので、CPU負荷率も低い・・・(クライアントの!)

※ 公開も配布もしてません・・・
  あしからず。

以上。
引用返信 編集キー/
■34911 / inTopicNo.8)  Re[4]: FTPでファイル転送を効率化する方法
□投稿者/ 倉田 有大 (554回)-(2009/04/14(Tue) 04:53:20)
>   ソケット通信で行えるよう作ってます。
>   因みに、パッシブ・アクティブモード両対応でUNIX系FTP
>   とIISのFTPに当然対応。

あ、ソケットを利用してですか。プロトコルの解析がちょっとめんどうかもしれませんね。

引用返信 編集キー/
■34912 / inTopicNo.9)  Re[5]: FTPでファイル転送を効率化する方法
□投稿者/ オショウ (156回)-(2009/04/14(Tue) 07:36:55)
> あ、ソケットを利用してですか。プロトコルの解析がちょっとめんどうかもしれませんね。

  ソケット通信だと確かに細かく場合わけが必要になりますが
  実際に何をどうしているか解るので、勉強になりました。

  一度作ってしまうと何かあっても大抵場合わけ抜けとかレス
  コンスコードの扱いミスとかをバグフィックスすれば動くの
  で、おもしろかったです。

  実際TELNETもソケット通信で実装しましたので、通信
  相手が何であってもそう怖くないですヨ!

※ 勉強の為、たまにはがんばりましょう!
  時間のあるうちに・・・今はそう忙しくないでしょうし・・・

以上。
引用返信 編集キー/
■34916 / inTopicNo.10)  Re[5]: FTPでファイル転送を効率化する方法
□投稿者/ aetos (126回)-(2009/04/14(Tue) 10:55:14)
aetos さんの Web サイト
No34911 (倉田 有大 さん) に返信
>>  ソケット通信で行えるよう作ってます。
>>  因みに、パッシブ・アクティブモード両対応でUNIX系FTP
>>  とIISのFTPに当然対応。
>
> あ、ソケットを利用してですか。プロトコルの解析がちょっとめんどうかもしれませんね。

解析っつーか、仕様は明文化されてますし。
http://www.ietf.org/rfc/rfc959.txt
http://hp.vector.co.jp/authors/VA002682/rfc959j.htm
(↑序文には RFC 1123 の訳とありますが、中身は RFC 959 です)。

その他に FTP 関係の RFC には、
1123、1127、1579、1635、1639、2228、2389、2428、2577、2640、2773、3659、4217 等があります。
引用返信 編集キー/
■34923 / inTopicNo.11)  Re[1]: FTPでファイル転送を効率化する方法
□投稿者/ こあら (53回)-(2009/04/14(Tue) 12:06:43)
No34904 (アキ さん) に返信
> ファイル転送(FTP)の速度を上げるにはいかようにすればよろしいでしょうか?

ひとつのファイルに圧縮してから転送するというのはいかがでしょうか。
サーバサイドでの解凍処理が必要になってしまいますが、高速化の効果は絶大だと思います。
引用返信 編集キー/
■34927 / inTopicNo.12)  Re[2]: FTPでファイル転送を効率化する方法
□投稿者/ 倉田 有大 (556回)-(2009/04/14(Tue) 12:40:18)
2009/04/14(Tue) 12:47:32 編集(投稿者)

>解析っつーか、仕様は明文化されてますし。
>http://hp.vector.co.jp/authors/VA002682/rfc959j.htm

軽く読みました。
うわー、自分実装は大変そう!
今なら.NETについてくるクラスつかっちゃいそうー(やったことないけど
でも、サーバークラスは用意されてなかったですよね。(あれは自分実装しないといけない?)


>ひとつのファイルに圧縮してから転送するというのはいかがでしょうか。

アキさんがFTPサーバーどうされるかですよね。サーバー側での解凍とクライアント側での圧縮がゆるされるなら、これが一番簡単そう。

>※ 勉強の為、たまにはがんばりましょう!

いつもがんばってますよ!ぷんぷん!
でも、aetosさんのRFCみてちょっと、自分実装したくなったりして。
簡単なHTTPサーバーなら経験ありますが、どっちが難しいかな(やることは似てそうですね)

というか、アキさん、スレのっとってすいませんー。
引用返信 編集キー/
■34928 / inTopicNo.13)  Re[2]: FTPでファイル転送を効率化する方法
□投稿者/ オショウ (158回)-(2009/04/14(Tue) 13:09:10)
> ひとつのファイルに圧縮してから転送するというのはいかがでしょうか。
> サーバサイドでの解凍処理が必要になってしまいますが、高速化の効果は絶大だと思います。

  あ〜それもやりました・・・
  IISで・・・

  FTPで圧縮ファイル転送して、WWWの方でとあるページにASPで
  URL受け付ける画面作って、HTTPで画面参照しURL書き込んで
  ソフト的にボタンクリックさせたら解凍して、終わったら、
  終了のレスポンスを表示させる・・・

  で同期とって行いました。

  できますヨ!

以上。
引用返信 編集キー/
■34930 / inTopicNo.14)  Re[3]: FTPでファイル転送を効率化する方法
□投稿者/ よねKEN (316回)-(2009/04/14(Tue) 13:15:41)
2009/04/14(Tue) 13:17:20 編集(投稿者)
2009/04/14(Tue) 13:16:32 編集(投稿者)

#脱線ネタの方への反応ですみません。しかも質問者様の対象とするJavaですらないや・・・

> >解析っつーか、仕様は明文化されてますし。
> >http://hp.vector.co.jp/authors/VA002682/rfc959j.htm
>
> 軽く読みました。
> うわー、自分実装は大変そう!
> 今なら.NETについてくるクラスつかっちゃいそうー(やったことないけど
> でも、サーバークラスは用意されてなかったですよね。(あれは自分実装しないといけない?)

RFCを熟読してそれだけを頼りにやると大変ですが、以下のような本もありますので、
そんなに難しくはないですよ。(実用に耐えるように作るのはテスト等も含めて大変でしょうけど)

.NET 1.0時代の本ですが、以下の書籍でFTPクライアントをソケットで実装を丁寧に解説してますね。

Vusual Basic .Net インターネットアプリケーションプログラミング技法
http://www.amazon.co.jp/Vusual-Basic-Net-%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%8A%80%E6%B3%95-%E3%82%AC%E3%83%AA%E3%83%90%E3%83%BC/dp/4816333347

引用返信 編集キー/
■34931 / inTopicNo.15)  Re[1]: FTPでファイル転送を効率化する方法
□投稿者/ .SHO (792回)-(2009/04/14(Tue) 13:16:35)
No34904 (アキ さん) に返信

> また一つ考えたのですが、それはテキストと画像を転送するソケットを各作成して、FTP転送するといった処理です。

テキストの方が先に終わってしまって、効果が少なそうに思えます。
引用返信 編集キー/
■34934 / inTopicNo.16)  Re[4]: FTPでファイル転送を効率化する方法
□投稿者/ aetos (127回)-(2009/04/14(Tue) 13:48:43)
aetos さんの Web サイト
No34930 (よねKEN さん) に返信
> #脱線ネタの方への反応ですみません。しかも質問者様の対象とするJavaですらないや・・・

同じく;;

> RFCを熟読してそれだけを頼りにやると大変ですが、以下のような本もありますので、
> そんなに難しくはないですよ。(実用に耐えるように作るのはテスト等も含めて大変でしょうけど)

俺はこれをお勧めです。
http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/netpro01.html
http://www.atmarkit.co.jp/fnetwork/rensai/netpro11/netpro01.html
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -