こんにちは。takei-hです。 ちょっと時間が経ってしまったのですが、アシアル株式会社KLab株式会社の合同勉強会でMessagePackとPHP Extensionについて発表しましたので、資料を公開します。



また、PHP Extensionもだいたい形になったので、公開します。 MessagePack PHP Extensionのダウンロード ソースを解凍した後、インストールは以下のコマンドで。
$ ./configure
$ make
$ sudo make install
そして、php.iniに以下の行を追加します。
extension=msgpack.so
これで準備完了です。 主に、ruby版のライブラリを参考にしています。使い勝手はPHPのjsonと同じような感じで、msgpack_pack()とmsgpack_unpack()です。 使い方はこんな感じ↓
1), array("takei"=>"hide"), 3);
 var_dump($data);

 // serialize
 $msg = msgpack_pack($data);

 // hexadecimal
 $str = unpack('H*', $msg);
 var_dump("0x".$str[1]);

 // deserialize
 $ret = msgpack_unpack($msg);
 var_dump($ret);
?>
また、ruby版と同様、ストリーミングデシリアライゼーションも可能です。
initialize();
 $buffer = "";
 $nread = 0;

 foreach($msgs as $msg){
    $buffer = $buffer . $msg;

    while(true){
        $nread = $unpacker->execute($buffer, $nread);

        if($unpacker->finished()){
            $msg = $unpacker->data();
            var_dump($msg);

            $unpacker->initialize();
            $buffer = substr($buffer, $nread);
            $nread = 0;

            if(!empty($buffer)){
                continue;
            }
        }
        break;
    }
 }
?>
まだ完全なテストやベンチマークはとっていないのでこれからやろう。。。と思っていたら、本日、MessagePackのPHP Extensionを公開された方がいたようです!(うぅ) MessagePackのPHP Extensionを作りました トロトロしている間に。。でもせっかくなので私も公開させてもらいます笑。優位点としては、array型もpack,unpackできることでしょうか! 世の中の流れは速い!これからはアウトプットを、MessagePackみたいに高速化していきたいですね!! == 追記(2009.11.30 17:34) == GitHubに公開しました。ご指導ご鞭撻のほどよろしくお願いします! http://github.com/hideyuki/messagepack-php-ext