2012-05-24 43 views
2

下面是我用來在node.js中加載proto文件的步驟。總的來說,我如何獲得協議緩衝區來處理node.js?Node.js,協議緩衝區和ubuntu - 如何讓它工作?

1)Dowloaded和安裝協議緩衝區到這個位置。

/home/ubuntu/Downloads/protobuf-2.4.1 

2)從此回購下載了這個protobuf-for-node修復程序。我將該文件夾放置在我的node.js應用程序文件夾的node_modules文件夾中。

git://github.com/pzgz/protobuf-for-node.git 

3)然以下命令

cd node_modules/protobuf-for-node 
PROTOBUF=~/Downloads/protobuf-2.4.1 /usr/local/bin/node-waf configure clean build 

4)提出下列文件到這些位置:

cp node_modules/protobuf-for-node/protobuf_for_node.h /usr/local/include/node 
cp node_modules/protobuf-for-node/build/Release/protobuf_for_node_lib.so /usr/local/lib 

5)然以下構建feeds.proto例子附帶node.js的船舶

cd node_modules/protobuf-for-node/example 
protoc --descriptor_set_out=feeds.desc --include_imports feeds.proto 

6)在應用程序中,我添加了這一行。

var express = require('express'), routes = require('./routes'); 
var fs = require('fs'); 
var puts = require('util').puts; 
url = require('url'); 
moment = require('moment'); 
var uuid = require('node-uuid'); 
var app = module.exports = express.createServer(); 
var Schema = require('protobuf_for_node').Schema; 
var schema = new Schema(fs.readFileSync('/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/node_modules/protobuf-for-node/example/feeds.desc')); 

7)這是我的錯誤。

module.js:337 
    throw new Error("Cannot find module '" + request + "'"); 
     ^
Error: Cannot find module 'protobuf_for_node' 
    at Function._resolveFilename (module.js:337:11) 
    at Function._load (module.js:279:25) 
    at Module.require (module.js:359:17) 
    at require (module.js:375:17) 
    at Object.<anonymous> (/home/ubuntu/app.js:9:14) 
    at Module._compile (module.js:446:26) 
    at Object..js (module.js:464:10) 
    at Module.load (module.js:353:31) 
    at Function._load (module.js:311:12) 
    at Array.0 (module.js:484:10) 
+0

它的名字可能是protobuf – Mustafa

+0

Tried..nope ...這行代碼來自google示例。 var Schema = require('protobuf_for_node')。Schema; – Tampa

回答

1

考慮使用圖書館的這個分支代替:

https://github.com/chrisdew/protobuf/

這似乎是更加積極地維護,並有更好的文檔。安裝它是npm是微不足道的,做一個require('protobuf')工作正常。

對於Ubuntu的我需要安裝以下獲得與故宮安裝包並獲得編譯原型文件:

sudo apt-get install libprotobuf-dev protobuf-compiler

看起來你已經擁有了這些,但手工安裝它們。

+0

可以解釋誰在這裏工作。什麼是.desc文件?我們可以創建緩衝區嗎? plz分享一些完整的示例代碼 – Udhaya

0

下面是我爲https://github.com/chrisdew/protobuf/issues/29所做的一個例子 - 大多數用戶不需要字節字段的複雜化。

buftest.proto

package com.chrisdew.buftest; 

message BufTest { 
    optional float num = 1; 
    optional bytes payload = 2; 
} 

buftest.js

var fs = require('fs'); 
var Schema = require('protobuf').Schema; 

// "schema" contains all message types defined in buftest.proto|desc. 
var schema = new Schema(fs.readFileSync('buftest.desc')); 

// The "BufTest" message. 
var BufTest = schema['com.chrisdew.buftest.BufTest']; 

var ob = { num: 42 }; 
ob.payload = new Buffer("Hello World"); 

var proto = BufTest.serialize(ob); 
console.log('proto.length:', proto.length); 

var outOb = BufTest.parse(proto); 
console.log('unserialised:', JSON.stringify(outOb)); 

var payload = new Buffer(outOb.payload); 
console.log(payload); 

生成文件:(第二線開始於TAB不是空格)

all: 
    protoc --descriptor_set_out=buftest.desc --include_imports buftest.proto 

輸出:

$ node buftest.js 
proto.length: 18 
unserialised: {"num":42,"payload":{"0":72,"1":101,"2":108,"3":108,"4":111,"5":32,"6":87,"7":111,"8":114,"9":108,"10":100,"length":11}} 

payload: <Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>