• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
 

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

on

  • 4,040 views

 

Statistics

Views

Total Views
4,040
Views on SlideShare
4,018
Embed Views
22

Actions

Likes
8
Downloads
0
Comments
0

2 Embeds 22

https://twitter.com 19
https://si0.twimg.com 3

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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