Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月

6,073 views

Published on

Published in: Technology

MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月

  1. 1. http://www.flickr.com/photos/free-stock/6837290750/
  2. 2. 自己紹介 染田貴志 (SOMEDA Takashi) http://d.hatena.ne.jp/tksmd 株式会社ヌーラボ所属 Backlog の開発・インフラ・サポート Cacoo のインフラ FxUG 京都スタッフ JAWS UG 京都支部長 関西 Java エンジニアの会 常連 kanjava vol.8
  3. 3. 1年ぶり4度目の登板 http://d.hatena.ne.jp/tksmd/20100929 https://cacoo.com/diagrams/zIPOGa9u3sP8NHHf http://d.hatena.ne.jp/tksmd/20110720 kanjava vol.8
  4. 4. MessagePack RPCご存知の方 kanjava vol.8
  5. 5. この本読んだ方 http://www.amazon.co.jp/Java並行処理プログラミング-―その「基盤」と「最新API」を究める―-Brian-Goetz/dp/4797337206 kanjava vol.8
  6. 6. 今日 ”お話しない” こと 非同期処理について 並行処理について kanjava vol.8
  7. 7. Agenda 背景 MessagePack RPC とは 使ってみた / 拡張してみた まとめ http://www.flickr.com/photos/rickerbh/449823989/ kanjava vol.8
  8. 8. 背景 http://www.flickr.com/photos/nicmcphee/2558167768/
  9. 9. 実現したい事 Git リポジトリ の情報を アプリ側で表示 kanjava vol.8
  10. 10. 課題 Git リポジトリとアプリサーバは別にしたい 実行速度はなるべく速くしたい 言語非依存でやり取りしたい kanjava vol.8
  11. 11. アーキテクチャ kanjava vol.8
  12. 12. MessagePack RPC とは http://www.flickr.com/photos/83633410@N07/7658034524/in/photostream/
  13. 13. RPC (Remote Procedure Call) メソッド呼び出し 処理結果 kanjava vol.8
  14. 14. ちっちゃくて、速い JSON http://wiki.msgpack.org/display/MSGPACK/Design+of+Serialization http://www.rubyinside.com/messagepack-binary-object-serialization-3150.html kanjava vol.8
  15. 15. ドラクエX でも! http://gigazine.net/news/20120824-dragonquest-backstage-cedec2012/ kanjava vol.8
  16. 16. 非同期 RPC http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC kanjava vol.8
  17. 17. パイプライン http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC kanjava vol.8
  18. 18. 実装が沢山 http://msgpack.org/ kanjava vol.8
  19. 19. 使ってみる / 拡張してみた http://www.flickr.com/photos/83633410@N07/7658268052/in/photostream/
  20. 20. 使ってみる https://github.com/tksmd/kanjava08-sample kanjava vol.8
  21. 21. 基本的な役割はこれだけ クライアント 処理の実装 サーバ kanjava vol.8
  22. 22. 非同期呼び出しpackage kanjava.msgpack.async;import org.msgpack.rpc.Future;public interface RPCAsyncHandler { // heavy が呼ばれる public Future<String> heavyAsync(); // light が呼ばれる public Future<String> lightAsync();} kanjava vol.8
  23. 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. 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. 25. 拡張してみた 画像ファイルなど byte[] をそのまま送信すると 色々大変 kanjava vol.8
  26. 26. Netty 的な話 kanjava vol.8
  27. 27. 泥臭い ここで横取り kanjava vol.8
  28. 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. 29. まとめ http://www.flickr.com/photos/nauright/2662160957/
  30. 30. 非同期処理は難しい?! 非同期処理を意識する所はほとんどない 手軽に複数サーバでの 分散処理が記述できる kanjava vol.8
  31. 31. 今後の課題など 他言語からのアクセス パフォーマンス的なところ 冗長化的なところ kanjava vol.8
  32. 32. 気になる https://twitter.com/frsyuki/status/239951922478596096 kanjava vol.8
  33. 33. まもなく! kanjava vol.8
  34. 34. Thanks!! ありがとうございました ご質問あればどうぞ! kanjava vol.8

×