Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なういProtocolBuffers

3169fb51728b8dc9d56675d3fb1a6de6?s=47 chobie
January 22, 2014

 なういProtocolBuffers

PHP勉強会@相模原でphp-protocolbuffersについてさくっと話してきたこと

https://github.com/chobie/php-protocolbuffers

https://github.com/chobie/protoc-gen-php

https://code.google.com/p/protobuf/

3169fb51728b8dc9d56675d3fb1a6de6?s=128

chobie

January 22, 2014
Tweet

Transcript

  1. ì   なういProtocolBuffersの話 相模原PHP勉強会 2014/01/22

  2. 自己紹介 ì  ちょびえです   ì  h*ps://twi*er.com/chobi_e   ì  h*ps://github.com/chobie  

    ì  仕事   ì  六本木らへんでWebサービスに携わっています   ì  主にサーバーサイドがメイン   ì  OSS   ì  PECL  Sundown,その他libuv,  libgit2  extension等   ì  あとFluentLoggerのPHP版書いてたりします
  3. Protocol  Buffersってなんぞ? ì  GoogleがOSSとして公開した自己叙述形式の ポータブルなバイナリフォーマット   h*ps://code.google.com/p/protobuf/  

  4. php版ができました h*ps://github.com/chobie/php-­‐protocolbuffers   IRC:  #php-­‐protocolbuffers  on  freenode     現在PECL登録の調整中

  5. なぜPHP版を作ったのか ì  もともと複雑なObjectを扱っていたけど他言語 とやりとりするときに仕様書とか書くのが面倒 くさかった   ì  既存のPHPのProtocolBuffersライブラリは遅すぎ て使い物にならなかった  

    ì  数件なら気にならないけど万単位だとキツイ
  6. 使い方 git  clone  h*ps://github.com/chobie/php-­‐protocolbuffers.git   cd  php-­‐protocolbuffers   phpize  

    ./configure   make  &&  make  install   #  あとはphp.iniにextension=protocolbuffers.soを追加すれ ばOK
  7. 使い方 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すれば出来上がり  
  8. 使い方 <?php   use  net\chobie\example\Person;   $person  =  new  Person();

      $person-­‐>setName(“chobie”);   $raw  =  $person-­‐>serializeToString();   echo  $raw;   $p2  =  Person::parseFromString($raw);  
  9. 主な用途 ì  多言語間で使う為のメッセージフォーマット   ì  phpのserialize/deserializeの代替

  10. Pros ì  独自の記述言語から多言語に対応したメッセー ジを作れる   ì  バイナリフォーマットなので小サイズ   ì  小サイズなのでserializeが高速、少メモリ

  11. Cons ì  特定の操作が苦手   ì  子メッセージの特定データを持つものを削除す る場合O(n)になりがち   ì  ポータブルなフォーマットなので苦手な表現あ

    り   ì  Key-­‐value的なのは苦手   ì  バイナリを見ただけだと何のデータか分かりづ らい
  12. MessagePackとの比較 ì  MessagePackのIDLは多言語でサポートしている わけではない   ì  PHP版はもちろん対応していない   ì  速度差はそこまで変わらない

      ì  エクストリームな使い方すると顕著だけど   ì  なんかアプリ作る時はProtocolBuffersのが楽   ì  inserZon_pointで好きなコードを埋め込めるのが 強力    
  13. ProtocolBuffersの利用例 ì  Android  Market  API   ì  Google  RealZme  bidding

     protocol   ì  Riakのバイナリ通信プロトコルとして   その他色んな所で使われています
  14. Ext書くとPHPアプリ開発が捗る ì  適材適所   ì  綺麗にまとめておけばHipHop移行もそこまで苦 じゃない   ì  PHP

     ext開発楽しいよ!   ì  Libgit2とか誰か手伝ってくれると嬉しい