More Related Content Similar to PIAXで作る P2Pネットワーク
Similar to PIAXで作る P2Pネットワーク (20) PIAXで作る P2Pネットワーク2. 自己紹介
伊藤 祐司
バックエンドの設計 開発
フレームワークの作成 バイナリ・テキスト変換 クローラー
アルゴリズム 仮想マシン
下北沢OSSカフェでPROCESS WARPというシステムを作っています
http://www.processwarp.org/
GitHub llamerada-jp
facebook ito.yuuji
blog http://llamerad-jp.hatenablog.com/
9. OverlayMgr mgr = peer.getOverlayMgr();
RPCWrapper rpc = mgr.getRPCWrapper();
PeerId peerId = new PeerId(<送信先>);
Object ret = rpc.remoteCall(
peerId,
Receiver.SERVICE_NAME,
"recv",
<送信メッセージ>);
単一PeerへのRPC
// 受信側のPeerId
System.out.println(peer.getPeerId());
// 受信用クラス
public class Receiver implements OldRPCService {
static String SERVICE_NAME = <サービス名>;
@Override
public String getServiceName() {
return SERVICE_NAME;
}
public Object recv(Object message) {
// 受信してからの処理
return <応答メッセージ>;
}
}
// 受信用インスタンスを登録
OverlayMgr mgr = peer.getOverlayMgr();
RPCWrapper rpc = mgr.getRPCWrapper();
Receiver receiver = new Receiver();
rpc.register(receiver);
sender receiver
Key-Valueストアなどに
入れて渡したり
11. マルチキャスト
// 属性の型によって適切なオーバーレイ
String ovClassName =
mgr.getOverlayFromKeyType(<属性>);
if (ovClassName == null)
ovClassName = MSkipGraph.class.getName();
// マルチキャスト
// Multi-key Skip Graphの場合、属性は範囲検索可能
ReturnSet<Object> rset =
mgr.forwardQuery(
ovClassName,
new Range(<属性>, <属性>),
<送信メッセージ>);
// マルチキャスト結果の取得
while (rset.hasNext()) {
try {
Object ret = rset.getNext(
OvConfigValues.
returnSetGetNextTimeout));
} catch (Exception e) {
// エラー処理
}
}
public class Callback implements OverlayCallback {
@Override
public Object execQuery(Object arg0, Object arg1) {
// メッセージ受信時の処理
// arg0 : メッセージ受信のトリガとなった属性
// arg1 : 受信メッセージ
return <応答メッセージ>;
}
@Override
public ReturnSet<Object> execQuery(
Set<Comparable<?>> arg0,
Object arg1) {
// ↑と同様
return <応答メッセージ>;
}
// 他にも幾つかあるけど省略
}
// 受信用インスタンスを登録
Callback callback = new Callback();
mgr.registerCallback(callback);
// 属性を設定
String ovClassName = mgr.getOverlayFromKeyType(<属性>);
if (ovClassName == null)
ovClassName = MSkipGraph.class.getName();
mgr.addKey(ovClassName, <属性>);
sender receiver