質問: インターネット経由で、大容量(400MB程度)のファイルを自動的に転送する方法を教えて下さい。 現在作成中のコンピュータ将棋プログラムの学習ルーチンを、分散コンピューティング的に「学習に協力して下さる方(以下、クライアント様と記載)のPC」と「私の自宅のPC(以下、サーバと記載)」で分散処理をしようと考えています。 ここで問題になったのが、大容量のパラメータファイル(400MB弱)をサーバ→全クラアント様に配布し、クライアント様の学習結果(これも同容量)を全クライアント様→サーバに転送する必要がある事です。 レンタルサーバを借りてクラアント様・サーバ間の中継をする方法も検討したのですが、大容量の転送が可能なレンタルサーバは高価ですので、無料で出来る方法を検討中です。 可能であれば、クラアント様とサーバが直に通信出来ればベストなのですが、どういった技術を使えば可能でしょうか? 当方、C++/Java/Python等でしたらプログラミング可能です。(他言語でより良い方法があれば、その言語を勉強して実装する事も視野に入れています。) ポイントは当方が有益と判断した順に傾斜配分させて頂きます。
回答: 自宅のサーバと任意のクライアントがツーツーでつながっちゃうと、色んなデータをやり取りできちゃうわけで、お互いにセキュリティ的な面でのあれなことがありそうですが、その辺りは無視します。 また、「大容量」、「無料(なるべく安く)」、「速度的な話」は、それぞれの判断基準によって許容できるレベルがあるでしょうから、その辺りの判断も質問者に任せます。 もし、自分でそのような状況になったときにどうするだろう、と考えてみました。 ■グローバルIPを取得して、自宅サーバを公開する これが一番直接的な方法だと思います。 無料で、ってわけには行きませんが、プロバイダによって値段は大きく変わります。 "自宅サーバ 固定IP" みたいなキーワードで検索すると情報が引っかかります。 公開する自宅のサーバは、普段は物理的に自宅の他の機器とは切り離しておく。 80 みたいなノーマルなポートは全部閉じておいて、一般的ではないポートでプログラムと使って通信する、かな。 ■グローバルIPではない方法で、自宅サーバを公開する ↑みたいなあたり。 最初のとあまり変わらない感じですけれど。 ■フリーのレンタルサーバを使う ときによって選択肢は変わってきますが、この回答を書いている時点であれば XFREE とか StarServer とか。 * * XFREE で 1GB、StarServer で 2GB 。 クライアントからサーバにデータを送って、自宅サーバからデータを取得したらデータを消す。 リアルタイムでやり取りする感じではなさそうなので、適切にスケジューリングすれば、それなりに数はさばけそうな気がします。 ■有効期限があるフリーのストレージサービスを使う 一時的にファイル転送をするようなサービスを使う。例えば、FireStorage のような。 クライアントに仕込んだプログラムでは、サービスにファイルをアップロードして、アクセスするための URL をメールで送るなり、フリーのサーバに保存しておくなりしておく。 有効期限が切れる前に、自宅からデータを取得。 自分でプログラムが書ける方ということですから、後は値ごろ感なりパフォーマンス的なところを勘案してみてください。