More Related Content
Similar to MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
Similar to MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月 (20)
More from Takashi Someda (13)
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
- 2. 自己紹介
染田貴志 (SOMEDA Takashi)
http://d.hatena.ne.jp/tksmd
株式会社ヌーラボ所属
Backlog の開発・インフラ・サポート
Cacoo のインフラ
FxUG 京都スタッフ
JAWS UG 京都支部長
関西 Java エンジニアの会 常連
kanjava vol.8
- 7. Agenda
背景
MessagePack RPC とは
使ってみた / 拡張してみた
まとめ
http://www.flickr.com/photos/rickerbh/449823989/
kanjava vol.8
- 8. 背景
http://www.flickr.com/photos/nicmcphee/2558167768/
- 10. 課題
Git リポジトリとアプリサーバは別にしたい
実行速度はなるべく速くしたい
言語非依存でやり取りしたい
kanjava vol.8
- 12. MessagePack RPC とは
http://www.flickr.com/photos/83633410@N07/7658034524/in/photostream/
- 15. ドラクエX でも!
http://gigazine.net/news/20120824-dragonquest-backstage-cedec2012/
kanjava vol.8
- 16. 非同期 RPC
http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC
kanjava vol.8
- 17. パイプライン
http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC
kanjava vol.8
- 18. 実装が沢山
http://msgpack.org/
kanjava vol.8
- 19. 使ってみる / 拡張してみた
http://www.flickr.com/photos/83633410@N07/7658268052/in/photostream/
- 23. 実装とインターフェースは違ってok
@Test
public void インターフェースと実装は違っていてもよい() throws Exception
{
EventLoop loop = EventLoop.start();
Server server = new Server(loop);
server.serve(new TestHandler());
server.listen(8969);
Client client = new Client("127.0.0.1", 8969, loop);
TestInterface handler = client.proxy(TestInterface.class);
String actual = handler.method();
assertThat(actual, is("ok"));
}
kanjava vol.8
- 24. ハンドラの public メソッドには注意
@Test
public void publicメソッドには注意してね() throws Exception {
EventLoop loop = EventLoop.start();
Server server = new Server(loop);
try {
server.serve(new ExecptionHandler());
} catch (MessageTypeException e) {
assertTrue("setDelegate を RPC メソッドとして登録しようとす
る", true);
} finally {
server.close();
loop.shutdown();
}
}
kanjava vol.8
- 25. 拡張してみた
画像ファイルなど
byte[] をそのまま送信すると
色々大変
kanjava vol.8
- 27. 泥臭い
ここで横取り
kanjava vol.8
- 28. Chunk 書き込み
final InputStream is = handler.getStream();
channel.write(CustomMessage.startMessage(msgid, key));
ChannelFuture writeFuture = channel.write(new ChunkedStream(is));
writeFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future)
throws Exception {
future.getChannel().write(CustomMessage.endMessage(msgid,
key));
is.close();
}
});
kanjava vol.8
- 29. まとめ
http://www.flickr.com/photos/nauright/2662160957/
- 30. 非同期処理は難しい?!
非同期処理を意識する所はほとんどない
手軽に複数サーバでの
分散処理が記述できる
kanjava vol.8
- 31. 今後の課題など
他言語からのアクセス
パフォーマンス的なところ
冗長化的なところ
kanjava vol.8
- 32. 気になる
https://twitter.com/frsyuki/status/239951922478596096
kanjava vol.8
- 34. Thanks!!
ありがとうございました
ご質問あればどうぞ!
kanjava vol.8