Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ì なういProtocolBuffersの話 相模原PHP勉強会 2014/01/22
Slide 2
Slide 2 text
自己紹介 ì ちょびえです ì h*ps://twi*er.com/chobi_e ì h*ps://github.com/chobie ì 仕事 ì 六本木らへんでWebサービスに携わっています ì 主にサーバーサイドがメイン ì OSS ì PECL Sundown,その他libuv, libgit2 extension等 ì あとFluentLoggerのPHP版書いてたりします
Slide 3
Slide 3 text
Protocol Buffersってなんぞ? ì GoogleがOSSとして公開した自己叙述形式の ポータブルなバイナリフォーマット h*ps://code.google.com/p/protobuf/
Slide 4
Slide 4 text
php版ができました h*ps://github.com/chobie/php-‐protocolbuffers IRC: #php-‐protocolbuffers on freenode 現在PECL登録の調整中
Slide 5
Slide 5 text
なぜPHP版を作ったのか ì もともと複雑なObjectを扱っていたけど他言語 とやりとりするときに仕様書とか書くのが面倒 くさかった ì 既存のPHPのProtocolBuffersライブラリは遅すぎ て使い物にならなかった ì 数件なら気にならないけど万単位だとキツイ
Slide 6
Slide 6 text
使い方 git clone h*ps://github.com/chobie/php-‐protocolbuffers.git cd php-‐protocolbuffers phpize ./configure make && make install # あとはphp.iniにextension=protocolbuffers.soを追加すれ ばOK
Slide 7
Slide 7 text
使い方 package net.chobie.Example; message Person{ opZonal string name = 1; message Phone{opZonal string number = 1;} repeated Phone phone = 2; } こんな感じの定義ファイル(message.proto)を作って protoc -‐-‐php_out=php message.protoすれば出来上がり
Slide 8
Slide 8 text
使い方 setName(“chobie”); $raw = $person-‐>serializeToString(); echo $raw; $p2 = Person::parseFromString($raw);
Slide 9
Slide 9 text
主な用途 ì 多言語間で使う為のメッセージフォーマット ì phpのserialize/deserializeの代替
Slide 10
Slide 10 text
Pros ì 独自の記述言語から多言語に対応したメッセー ジを作れる ì バイナリフォーマットなので小サイズ ì 小サイズなのでserializeが高速、少メモリ
Slide 11
Slide 11 text
Cons ì 特定の操作が苦手 ì 子メッセージの特定データを持つものを削除す る場合O(n)になりがち ì ポータブルなフォーマットなので苦手な表現あ り ì Key-‐value的なのは苦手 ì バイナリを見ただけだと何のデータか分かりづ らい
Slide 12
Slide 12 text
MessagePackとの比較 ì MessagePackのIDLは多言語でサポートしている わけではない ì PHP版はもちろん対応していない ì 速度差はそこまで変わらない ì エクストリームな使い方すると顕著だけど ì なんかアプリ作る時はProtocolBuffersのが楽 ì inserZon_pointで好きなコードを埋め込めるのが 強力
Slide 13
Slide 13 text
ProtocolBuffersの利用例 ì Android Market API ì Google RealZme bidding protocol ì Riakのバイナリ通信プロトコルとして その他色んな所で使われています
Slide 14
Slide 14 text
Ext書くとPHPアプリ開発が捗る ì 適材適所 ì 綺麗にまとめておけばHipHop移行もそこまで苦 じゃない ì PHP ext開発楽しいよ! ì Libgit2とか誰か手伝ってくれると嬉しい