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.
});
方便吧?我的軟件是調試通過。