Skip to content

lark.js 使用 protobuf

Xu,Yizhi edited this page Jan 30, 2015 · 1 revision
  1. 安装 protobufjs 库

protobufjs 库是纯js实现的 protobuf 库,没有c++代码不需要编译,可以轻松跨平台。因此这里我们选用它作为 lark.js 使用 protobuf 的推荐方案。但是因为是纯js实现的可能会有性能问题,待测试。

npm install protobufjs
  1. 将 protobuf 的scheme 编译成js文件

使用 protobufjs 自带的工具能将protobuf 的 scheme 编译成js格式的类。编译完后就可以在程序里直接调用该类了、

node_modules/protobufjs/bin/proto2js ~/config/store_log.pb -commonjs=b2log > store_log_pb.js
  1. 调用protobuf 编译后的类

lark.js 里对数据库等service访问的接口封装在 dao 层里。因此这里在dao层新建文件 pblog.js, 来对该protobuf 通信格式进行一层封装,提供给上层应用,如 dataService 使用。

输入如下代码对 protobuf 格式数据 进行生成和读写

var b2log = require("./store_log_pb.js”) // 载入scheme
var Request = b2log.Request
var request = new Request({ // 填充pb scheme中定义的 Request 消息
    "key": 'key_test’,  
    "value": 'value_test'
})

var buffer = request.encode() // 生成 protobuf 数据

var socket = ...;
socket.send(buffer.toArrayBuffer()); // 用socket发送 protobuf 数据
    socket.on("message", function(buffer, flags) { // 接收 protobuf数据
    console.log(Request.decode(buffer) // 解压刚编译的 protobud 内容 => { key: 'key_test', value: 'value_test' }
}

至此,lark.js 中读写 protobuf 格式数据的工作就完成了。

Clone this wiki locally