P2Pアップローダー
●これは何?
ブローカー型P2PのWebアップローダーです。
●仕組み
・用語
1.ホストID:最初の起動時に生成されるホストを識別するランダムな文字列
2.ホスト情報:ホストIDとIPアドレス、ポート、回線速度などの情報
3.所有者情報:ホストIDと所有ファイルのファイル名のペア
4.ファイル情報:ファイル名、サイズ、ファイル内容に関するコメントなどの情報
5.中央サーバー:これらの情報を保持するサーバー。
・起動
1.最初にサーバントを起動すると .hostid ファイルにホストIDが保存されます。
2.サーバントは起動中、定期的に中央サーバーと通信し、ホスト情報をデータ
ベースに登録します。
3.中央サーバーはデータベースにオンラインホストのホスト情報を保持します。
・ファイルのアップロード
1.ローカルのサーバントのアップローダー画面
http://localhost:14714/upload
にアクセスしファイルをローカルディスクにアップロードします。
アップロードされたファイルのURLは
http://localhost:14714/data/dbdc4454b5723e9a88310d40165317c2.jpg
のようになります。
2.サーバントはアップロードされたファイルのファイル名(ハッシュ.拡張子)と
ホストIDのペア(所有者情報)を中央サーバーのデータベースに登録します。
3.中央サーバーはデータベースに所有者情報を保持します。
・ファイル情報の編集
1.ローカルに持っているファイルにコメントをつけることができます。また、
そのコメントを中央サーバーに登録して共有したり、逆に中央サーバーに
あるコメントをローカルに反映させることができます。
・ダウンロード
1.以下のようなローカルホストのURL
http://localhost:14714/data/dbdc4454b5723e9a88310d40165317c2.jpg
にブラウザからアクセスすると、サーバントはローカルにそのファイルがあ
るかをチェックします。
2.ファイルが存在する場合、サーバントは通常のWebサーバと同じように、その
ままそのファイルをブラウザに送ります。
3.ローカルに要求されたファイルが存在しない場合は、サーバントは中央サーバー
に問い合わせ、ファイルを所有しているホストのIPアドレスのリストをもらいます。
4.サーバントは、もらったIPアドレスのリストにあるホストに順番に問い合わせ、
ファイルが見つかった場合はダウンロードします。この時、相手側のホストは
普通のWebサーバの様にふるまいます。 宣伝キタ━━━━━━(゚∀゚)━━━━━━ !!!!! 5.ダウンロードしたデータのハッシュがファイル名のハッシュと一致した場合
は、ファイルをローカルディスクに保存し、中央サーバーに所有情報を登録します。
6.5で正しいファイルが見つかった場合は2と同様にファイルをブラウザに送ります。
最後までファイルが見つからなかった場合は Not Found になります。
7.中央サーバーにファイル情報があれば取得します。
・終了
1.サーバント終了時に中央サーバーのデータベースから自分のホスト情報と所有
者情報を削除します。
●メリット
・普通のブラウザからアップローダーのファイルにアクセスする要領で使えます。
jpgなどの画像ファイルなら2chブラウザ付属のビューアでも見れます。
・自分のアップローダーを持つことになるので、サイズ制限やファイルタイプを気
にしてアップローダーを探す必要はありません。
・アップロードしたファイルはアクセスしてきた他のノードにも保存されるので
アクセスを分散させることができます。
・これまでのアップローダのように「アクセスしてみたら既に Not Found だった」
なんてことは減ると思います。
・ファイル名にハッシュを使っているので、同じファイルを何度もダウンロードす
るようなことを防げます。
・ファイル名とファイル情報を関連つけることで、無意味なファイル名で内容が
分からないということが減ると思います。
・ファイル情報を共有できるので、いちいち自分でコメントをつけて整理する手間
が省けるかもしれません。
・要求の多いファイルほど多くのコンピュータにコピーされ、冗長に保存されます。
おもしろ画像や爆笑Flashなど、サイズが小さく、あまり重要ではないけれど
ときどき、ふっとまた見たくなるようなファイルの共有、保存に適しています。
・例えば「あのFlashうpしてください」といったケースでは、これまでは、要求する側
の人は掲示板などで依頼し、提供する側の人はローカルディスクから目的のファイ
ルを探し、アップローダーにアップロードしてURLを教えてあげるといった手続き
が必要でした。アップローダーのファイルが削除されたら、また同じ手続きが
必要になります。
SkyPeer を使えば、要求する側の人は中央サーバーで検索すれば目的のファイルの
URLを見つけることができ、オンラインのホストのどれかがそのFlashを持っていれ
ばダウンロードすることができます。提供する側の人は、そのFlashのローカルの
URLを教えてあげるだけで済み、新たにアップロードする必要はありません。
●デメリット
・ポート(デフォルトで14714)を開く必要があります。
・P2Pですが、ノード間は直接通信するので匿名性はありません。
・HTTPなのでサイズの大きなファイルの共有には向きません。
・一応自鯖を立てることになるのでセキュリティなどの問題が出るかもしれません。
・違法なファイルやウィルスをダウンロードしてしまった場合、今度は自分が
それらを公開してしまうといったことがあるかも知れません。
・2chブラウザに固有の画像キャッシュ機能がある場合、2倍のディスクスペースを使う
ことになります。
・ある程度ユーザがいないと使いものになりません。
・ダウンロードツールのレジューム機能などは使えません。
・Rubyなので基本的に動作おもいです。
●必要なもの
・Ruby1.8.1
http://www.ruby-lang.org/ja/
・amrita
http://www.brain-tokyo.jp/research/amrita/index_ja.html
●インストール
・Rubyをインストールする。
・Amritaをインストールし、クラスライブラリのサーチパスを通す。
・skypeerのtar.gzを適当な場所に展開する。
●使い方
・必要に応じて skypeer.conf に手を入れる。
・"./prepare.rb skypeer.conf" を実行して必要なファイルとディレクトリを作る。
・ポートを開けてない場合は開ける。(デフォルトで 14714 番です)
・"./skypeer.rb" を実行すると起動します。
・http://localhost:14714/list にアクセス。
・終了時は "kill `cat skypeer.pid`" とかしてください。 >>1
Winでのインストール法をもっと分かりやすく この板は何時でも人がすくない。
昔板よりPVがすくないと分かったときはちょっとショックだった。 試しにrubyをインストールして実行したんだけど
skypeer.rb:44:in `fork': The fork() function is unimplemented on this machine
(NotImplementedError)
って言われちゃって動かなかった。
どうしたらいいんだYO ヽ(`Д´)ノプンカプンカ >>14
全くの想像だけど、rubyの種類によってうまくいったりうまくいかなかったりするのでは?
なるべく最新版を使うとか、それでも駄目ならCygwin版かなあ??
Windowsでの使い方をcygwinのインストールから簡単に説明します。
1.cygwin をインストールしてない場合はインストールします。
このサイトを参考にインストールしてください。
http://www.mars.dti.ne.jp/~sohda/cygwin/setup.html
パッケージ選択のところで、全部 Default になってますが、 とりあえず Devel は
Default から Install にしてください。
(これで Ruby1.8.0 がインストールされるみたいですが、1.8.1を使います。)
2.Ruby1.8.1とamrita1.0.2をダウンロード。
・Ruby1.8.1
http://www.ruby-lang.org/ja/
・amrita
http://www.brain-tokyo.jp/research/amrita/index_ja.html 3.cygwinのホームディレクトリ(デフォルトでC:\cygwin\home\ユーザー名)に
ダウンロードした ruby-1.8.1-preview3.tar.gz と amrita-1.0.2.tar.gz を移動。
4.cygwin を起動。
ruby-1.8.1-preview3.tar.gz と amrita-1.0.2.tar.gz があるか確認。
$ ls
ruby-1.8.1-preview3.tar.gz amrita-1.0.2.tar.gz
4.ruby-1.8.1-preview3.tar.gz を展開。
$ tar -xzvf ruby-1.8.1-preview3.tar.gz
5.ruby-1.8.1 ディレクトリに移動
$ cd ruby-1.8.1
6.README.ja を見ればインストール法がかいてありますが、やることは
$ ./configure
$ make
$ make test
$ make install
です。make は時間かかります。 /usr/local の方にインストールされると思います。
$ /usr/local/bin/ruby --version
とかして確認してください。
7.amritaもインストールします。
$ cd
$ tar -xzvf amrita-1.0.2.tar.gz
$ cd amrita-1.0.2
/usr/local の方にインストールしたいので、そのままコピーしちゃいます。
$ cp -r lib/amrita /usr/local/lib/ruby/site_ruby/1.8
8.あとは、skypeer を展開して >>7 の「使い方」のようにするだけです。
$ cd
$ tar -xzvf skypeer-0.1.tar.gz
$ cd skypeer-1.0
$ ./prepare.rb skypeer.conf
$ ./skypeer.rb >>14
win98とかはforkできなくなかったっけ? >>14
すみません。cygwinで、しかも本家のソースからコンパイルしたやつしか
動作テストしてません。よろしければ>>16-18の方法で試してみてください。
あと、うちのPCが異音を出し始めたのでAM10:00〜PM15:00くらいまで
シャットダウンしてました。>>8がNot Foundだった人今一度お試しください。 しかし俺の考えた奴と似ている点が多いなあ。
先を越されてしまったぶん文句は言えないけど。
中央鯖がP2Pで稼働してる所は違うけど。 >>26
ミエタ━━━━━(゚∀゚)━━━━━!!!! >>26
ミエタ━━━━━(゚∀゚)━━━━━!!!!
>>27
>>8は見えませんか? ・LAN内の複数のPCで使いたいときどうするか?
1.各PCでサーバントを起動する
→全部ポートを開かなくてはならない。
個人使用で1台に統一管理したいのに、各PCにデータが分散してしまう。
2.1台親サーバントを起動し、他のPCは親サーバントにリクエストする子サーバントを使う
→子サーバントが要る、親サーバントを経由する分遅くなる
・デフォルトポート以外を使いたいときどうするか?
1.ブラウザプラグイン(プロトコルハンドラ?)を用意する