NodeJS 下protobuf.js 的應用

nodeJS 下使用google 的protobuf 實現消息的序列化/反序列化異常的簡單,連proto文件的預編譯都不需要。沒有必要使用protoc 工具將proto 文件轉換成JavaScript的程序。直接使用proto文件。

安裝

$> npm install protobufjs [--save --save-prefix=~]

proto 文件

syntax = "proto3";
package websocket;

message WebsocketMessage {
    string Topic =1;
    bytes  Body=2;
 }
message GenericRPC {
    string Method =1;
	string From =2;
	string To=3;
	int32 Code=4;
    bytes  parameters=5;
 } 

測試程序

var protobuf = require("protobufjs");
protobuf.load("./CoreMessage.proto", function(err, root) {
    if (err)
        throw err;
 
    // Obtain a message type
    var WebsocketMessage = root.lookupType("websocket.WebsocketMessage");
 
    // Exemplary payload
    var payload = { Topic: "weatherstation1.RPC",Body:new Buffer("hello the world") };
   
    // Verify the payload if necessary (i.e. when possibly incomplete or invalid)
    var errMsg = WebsocketMessage.verify(payload);
    if (errMsg)
        throw Error(errMsg);
 
    // Create a new message
    var message = WebsocketMessage.create(payload); // or use .fromObject if conversion is necessary
 
    // Encode a message to an Uint8Array (browser) or Buffer (node)
    var buffer = WebsocketMessage.encode(message).finish();
    // ... do something with buffer
 
    // Decode an Uint8Array (browser) or Buffer (node) to a message
    var message = WebsocketMessage.decode(buffer);
    // ... do something with message
     console.log("Topic:"+message.Topic);
     console.log("Body:"+message.Body)
    // If the application uses length-delimited buffers, there is also encodeDelimited and decodeDelimited.
  
});

方便吧?我的軟件是調試通過。

發佈了111 篇原創文章 · 獲贊 80 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章