goo blog サービス終了のお知らせ 

P2Pとかプログラミング全般とか

P2Pアプリ開発を目指していこうかと。
基本、週末更新なので遅々として進まず。

メッセージを送るには その2

2008-02-11 14:51:23 | Overlay Weaver
実際に送信する方法は、こんな感じ。
まず大本の ow.dht.DHT クラスのインスタンスを dht とすると、
 dht.getRoutingService().getMessageSender().send(dest, msg);
となる。ちょっと長い。

dest は ow.messaging.MessagingAddress インターフェイス。これは
トランスポート層を取り替えられるため。SocketAddress にしちゃうと
インターネット専用になっちゃうから。ま、実質はインターネットが大半だろう
けど。一応、シミュレーション用のアドレス EmuMessagingAddress が用意されて
いるのでインターネット専用ってわけじゃない。
このアドレス、どう作るかというと、ow.messaging.MessagingProvider.getMessagingAddress(java.lang.String hostAndPort) を使う。
 dht.getRoutingService().getMessagingProvider().getMessagingAddress("www.foobar.com:8888");
こんな感じ。
あとは送信されてきたメッセージから取り出す方法もある。
 ow.messaging.Message.getSource().getAddress()

ちなみにこういうのを調べるにも JavaDoc が大活躍。MessagingAddress のページを開いて、
画面上部の「使用」ってリンクを開けば MessagingAddress を使っているメソッド
が一覧で見れる。便利。

これでメッセージを送れるのだが、問題はトランスポート層。どんな方法で送るか、
それが問題で以下続く。

メッセージを送るには その1

2008-02-10 22:15:40 | Overlay Weaver
この Blog は基本、備忘録っつーか調べたことを書き散らかす目的なんで、話が飛びまくるけどご容赦。

ネットワークを使ったアプリは、他ノードと通信しないと当然動けない。
DHT 自体は「値を put して、get して」っていう Map が主体で、ぜんぜんイベントドリブンじゃない。検知できなくもないけどその話はまた今度。

OW ではメッセージ ow.messaging.Message が担当。
 Message(IDAddressPair src, int tag, java.io.Serializable... contents)
これ見ると、src は詐称できるんかいとか思うけど、まあそこは置いといて。
tag はこのメッセージの種別。contents がメッセージの本体データ。

ここで注意点。tag は int って書いてあるけど、実は byte の範囲しか対応してない。これは ow.messaging.Message.encode(Message msg) を見れば判る。
  buf.put((byte)msg.tag);
  buf.putInt(srcAndContents.length);
  buf.put((byte)msg.contents.length);
  buf.put(srcAndContents);
というわけで、msg.tag は byte にキャストされるのでありました。

実際にどういう形式で送られるかというと、上記のようにヘッダ情報+シリアライズ。
シリアライズは JavaDoc 見ると「効率良くない」みたいな書かれ方してるけど、
車輪の再発明するよりかは良いんじゃないか。標準機能だし、バージョンアップ時
の対応とかあるみたいだし。
ちなみに GZip 圧縮してみたけどあんまり縮まなかったよ、Message クラスの encode 後のデータ。無理にあがいても無駄っぽい。

Message.encode したデータ、実データ以外のシリアライズ用データとかその他もろもろ、どれくらい必要なのかと計ってみたら 408 バイトだった。
これはちょっと多いよな。次に書く予定の送信方法にも関わってくるんだけど、以下続く。

何は無くともJavaDoc

2008-02-10 21:47:55 | Overlay Weaver
Overlay Weaver はソース、バイナリ両圧縮ファイルとも JavaDoc が付いてません。
なのでサクっと作っちゃいましょう。JavaDoc 無いと不便でしょうがない。

まずは Eclipse で Java プロジェクトを作成。
ソース圧縮ファイルを解凍して src ディレクトリをプロジェクトにぶち込む。
lib ディレクトリもぶち込んで、プロジェクトのプロパティから「Java のビルド・パス」を選んでライブラリを追加する。
あとはプロジェクト名を右クリックして「エクスポート(O)...」を選ぶ。
「JavaDoc」を選んで、後は適当に選択しちゃって「終了」ボタンで完了。

当面の目標

2008-02-09 22:54:17 | Overlay Weaver
P2Pニコ動キャッシュ共有プログラムを作ることを当面の目的に設定。
http://d.hatena.ne.jp/kanbayashi/20080101/p2
カテゴリにもあるんですが、Overlay Weaver を使って DHT で実装予定。
つーか OW でアプリ作ってる人が居ない今が注目を集める(のか?)好機、
ってイヤラシイ気持ちでがんばって行きたい。

当面の目標を達成するため、いろいろ OW を調べてそれを書いていくのが
しばらく続くと思う。ツール使うにも下調べしないとね。