From: http://blog.youkuaiyun.com/tiantangyouzui/article/details/72834719
环境
nodejs:v6.10.3
npm:3.10.10
protobufjs:6.7.3
ws:3.0.0
- 1
步骤
一、安装node(略)
二、创建项目文件,一个server一个client,目录结构均为
|.vscode
|---launch.json
|node_modules
|---略
|proto
|---a.proto
|---b.proto
|index.js
|package.json
- 1
二、安装protobufjs和ws
在项目文件夹下执行
npm install protobufjs --save
npm install ws --save
- 1
三、准备proto文件
//a.proto
package ceshipackage; //包名
syntax = "proto3"; //指明proto文件的protobuf协议版本,不指明则是v2
import "./b.proto"; //引用b.proto
message textMessage {
peoplepackage.peopleMessage people = 1;
}
- 1
//b.proto
package peoplepackage;
syntax = "proto3";
message peopleMessage {
string name = 2;
int32 age = 1;
}
- 1
四、client端index.js代码
var ProtoBuf = require("protobufjs");
// 同步创建proto,异步用ProtoBuf.load("./proto/a.proto",function(err,root){...})
var root = ProtoBuf.loadSync("./proto/a.proto");
// 获得一个包类型
var textMessage = root.lookupType("ceshipackage.textMessage");
// 定义一个符合包类型的变量
var payload = { people: {age: 13, name: 'aaa' } };
// 检测是否符合类型
var errMsg = textMessage.verify(payload);
if (errMsg) throw Error(errMsg);
// 生成一条message
var message = textMessage.create(payload); // or use .fromObject if conversion is necessary
// 将message转成buffer,node下转成Buffer,browser下转成Uint8Array
var buffer = textMessage.encode(message).finish();
var WebSocket = require('ws');
const client = new WebSocket('ws://localhost:8888');
client.onopen = function () {
console.log(buffer);
client.send(buffer);
}
- 1
五、server端index.js代码
var ProtoBuf = require("protobufjs");
var root = ProtoBuf.loadSync("./proto/a.proto");
var AwesomeMessage = root.lookupType("ceshipackage.textMessage");
var wss = require('ws');
var server = new wss.Server({
port: 8888
});
server.on('connection', function (client, req) {
client.on('message', function (buffer) {
console.log(buffer);
var message = AwesomeMessage.decode(buffer);
console.log(message);
})
})
- 1
六、先运行server,再运行client