Carpe Diem

  Top > スポンサー広告> Node.js > Protocol Buffersを使ってみる  

スポンサーサイト

-- - --/-- [--] - --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Protocol Buffersを使ってみる

2013 - 09/03 [Tue] - 21:41

Google Protocol Buffersを使ってみます。
これはJSONやXMLなどの冗長なファイルをシリアライズ(バイナリ化)することでデータの転送を速くするためのものです。

・プログラミング言語に依存しない
・コンパクトなバイナリ形式を採用
・データアクセスコードを自動生成

などのメリットがあります。


使い方の流れとしては
◆前準備
①.protoファイルを作成(定義ファイル)
②protocコマンドでスキーマファイルの作成
◆プログラム内
③スキーマファイルからスキーマオブジェクト(schemaObj)を生成
④schemaObj.serialize(obj)でバイナリ化、schemaObj.parse(binary)でもとに戻す

です。

ではまずソースからインストールしてみます。

◆インストール
https://code.google.com/p/protobuf/downloads/list

ダウンロードして展開します。

$ tar xvzf protobuf-2.5.0.tar.gz
$ cd protobuf-2.5.0
$ ./configure
$ make
$ make check
$ sudo make install

でインストール完了です。

◆.protoファイルの作成
今回はNodeでやってみます。

var hoge = {x:1, y:"fuga", z:true};

というオブジェクトをシリアライズ、デコードしてみます。
./protos/test.proto
package Test;
message TestData {
    optional int32 x = 1;
    optional string y = 2;
    optional bool z = 3;
}


ファイルの型はprotoファイルの記述を参考にしてください。


◆protocコマンドでスキーマ作成
$ protoc -o protos/test.desc protos/test.proto

これで前準備は完了です。

◆Nodeにnode-protobufのインストール
パッケージをインストールします。
package.jsonのdependenciesに
"dependencies": {
"protobuf": "git://github.com/chrisdew/protobuf.git"
}

を付け足して

$ npm install


◆シリアライズ、デコードをする
プログラムtest.jsを作ります。
var fs = require('fs');
var path = require('path');
var Schema = require('protobuf').Schema;

var readFileSyncRelative = function(file) {
return fs.readFileSync(path.resolve(__dirname, file));
};

var schema = new Schema(readFileSyncRelative('protos/test.desc'));
var Test = schema['Test.TestData'];

var fuga = {x:1, y:"fuga", z:true};

var testEncode = Test.serialize(fuga);
var testDecode = Test.parse(testEncode);
console.log(testDecode);

実行します。

$ node test.js

結果:
{ x: 1, y: 'fuga', z: true }

確認できました。

ソース:
Protocol Buffersを使う
protoファイルの記述
protobuf-for-node

コメントの投稿





管理者にだけ表示を許可する

 | ホーム | 

プロフィール

Cicatrice

Author:Cicatrice
備忘録

検索フォーム

カテゴリ

最新記事

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。