- 日時 :
- 2011/04/03 14:00 to 17:00
- 定員 :
- 20 人
- 会場 :
- 株式会社 プリファードインフラストラクチャー (東京都文京区本郷 2-40-1 本郷東急ビル 4F)
- URL :
- http://msgpack.org/
- 管理者 :
frsyuki
- ハッシュタグ :
- #msghack3
※参加登録はEventbriteで行ってください
このATNDは告知用ページとして使っています。
参加登録:http://msghack3.eventbrite.com/
内容
- 仕様や設計などの相談
- Hacking!!
日時
4月3日(日) 14:00〜
場所
株式会社 プリファードインフラストラクチャー会議室
ありがとうございます!
タイムテーブル

議題
MessagePack-RPCのバージョンと名前空間の仕様議論
名前空間:複数のモジュールで構成されるサーバアプリケーションで、RPCのポート番号は1つだけにしたいときに、RPCのメソッド名が重なってしまうことがあるので、名前空間を分けたい。
互換性も維持したい(例:名前空間が省略していたら、この名前空間が指定されていることにする)。
- プロトコルどうする
- APIの設計&プロトタイピング
:frsyuki、nobu_kさんぜひ
MessagePack-RPCのエラー処理の実装
Java版には実装できそう。
MessagePack-RPC Java版のエラー処理の実装など – Togetter
- プロトコル
- APIの設計&実装
:frsyuki、mugaさんぜひ
Scala対応
TemplateBuilder周りに修正が必要そう?
JavaBean対応(privateフィールドのシリアライズ)
:takezoux2さん、frsyuki、mugaさんぜひ
JRuby対応
無案。
日付/時刻型のシリアライズ方法のガイドライン
「文字列はUTF-8」のように、ガイドラインを決めておくと相互運用性が向上する。
- 案1:1970-01-01 00:00:00 UTC からの経過秒を整数で保存
- 案2:1970-01-01 00:00:00 UTC からの経過ミリ秒を整数で保存
- 案3:1970-01-01 00:00:00 UTC からの経過マイクロ秒を整数で保存
- 案4:1970-01-01 00:00:00 UTC からの経過秒(精度は秒またはミリ秒またはマイクロ秒)を浮動小数で保存
- 案5:1970-01-01 00:00:00 UTC からの (経過秒, マイクロ秒) を整数2要素の配列で保存
- Java版でDateクラスの組み込みTemplateを実装?
:takezoux2さん、frsyuki、mugaさんぜひ
big decimal型のシリアライズ方法
- Java版でBigDecimalクラスの組み込みTemplateを実装?
:mugaさん
Java版のTemplateのプリコンパイラの実装
Androidではクラスを動的にロードできない制約があるので、JavassistTemplateBuilderが使えない。
そこで、事前に.classを生成しておけると嬉しい。
- 実装方法
- コマンド?
- コンパイラプラグイン?
- アノテーションプロセッサ?
:mugaさん
IDLの仕様
IDLの実装方法
プロトタイプ実装
frsyuki/msgpack-idl.git – github
- 実装済み
- 構文解析
- 抽象構文木の構築
- 未実装
- Genericsの評価器
- 継承関係の評価器
- 型の検査器
- コード生成器
- コード生成器のプラグイン機構
- 詳細
- 実装言語:Ruby
- パーサライブラリ:"parslet":http://kschiess.github.com/parslet/
- 所感:frsyuki
- 面倒なところはクリアした! 事態収束への道筋は見えた。
- Thrift互換性は一端捨ててみた。互換性を取るなら、Thrift IDL→MessagePack IDL ASTへの変換器を実装する方針
- 今の実装では、テキスト→謎のツリー→AST→IR→言語コード の4パス処理。ちょっと遅い。
圧縮
- A案:MessagePackに入れる
- B案:RPCのプロトコルに入れる
- C案:RPCのトランスポートに入れる
MessagePackで圧縮をサポートして節電する! – Togetter
このページのような内容を常にまとめておくページが欲しい
githubのリポジトリ(コミットログ)とも連携したいところ。
- Wikiの中にページを作成する案
- 新たにJIRAを入れてチケットベースにする案
- frsyuki:JIRAを使ってみているところ
:frsyuki、kzkさん
JIRAとConfluence
試験的にインストールしてみました:frsyuki
- http://jira.msgpack.org/
- http://wiki.msgpack.org/
MessagePackカンファレンスをやりたいという話
@mikeda: みんなMessagePackがイイって言ってるなぁ。実際、どういうところに使ってるんだろ
みたいな話もあるので、こんな所でこんな感じで使っていて、マジで使える品質だZE☆! というアッピールができると良さそう!
話すネタとか場所とか。
型変換テンプレートがRuby版にも欲しい
本質的にシリアライザには型変換の機構が必要で、日付型や文字列/バイト列問題をスマートに解決するには型変換機構が必須になる。
と言うわけで、Ruby版にもC++版やJava版にあるような型変換テンプレートを導入したいが、今のところ設計案なし。
RPC Ruby版の課題
EventMachine対応
背景:EventMachineに対応して欲しいと言うtweetが、海外でちょくちょく発生している。
http://twitter.com/#!/tobi/status/52112027455471616
方針:Java版と同じ設計で、イベントループをプラガブルにする案。ただしEventMachineはNettyと違ってマルチスレッドに対応しておらず、あらかじめ決められたreactor threadなるスレッドでしか駆動できない制限があるため、若干の工夫を要すると思われる
エラー処理、バージョン、名前空間の設計と実装
プロトコルが決まったら、まずプロトタイプ的な実装が必要になりそう。
エラー処理のAPIは、現在のAPIではユーザー定義の例外クラスを設定できないので、SessionクラスやSessionPoolクラスなどに例外クラスを設定するメソッドを追加する必要がある。
参考(Java版) MessagePack-RPC Java版のエラー処理の実装など
バージョンのAPIは、無案。たぶんDispatcherの改修で対応可能。
名前空間のAPIは、現状のAPIではServerに一つのDispatcherしか渡せないのを、複数の key => Dispatcher ペアを渡せるようにする。(ついでにQtのsignal/slotの様な疎結合性を高めるディスパッチ方式を導入してみたい)
サーバからクライアントへのRPC
繋げてきたクライアントに対して、逆方向(サーバ→クライアント)にRPCしたいというケースが意外に多くある。
API的には、Sessionクラスにserve(Dispatcher)メソッドを実装する。あるいは、serveメソッドを別のクラスかモジュールに切り出して、SessionクラスとServerクラスが継承するかMixInする。
実装的な問題として、サーバはクライアントに対してSessionインスタンスを作って割り当てる必要がある(今は割り当てていない)。たぶん、Transportクラス(とTransportクラスとServerクラスの間のインタフェース)にも変更が必要になる(Transportクラスが接続を受け付けたときにSessionインスタンスを作成する)。
コメントを投稿するには、ログインしてください。