首页 > Web开发 > 详细

protocol buffer——nodejs中的实践

时间:2020-04-23 20:16:09      阅读:127      评论:0      收藏:0      [点我收藏+]

本次采是使用google提供的protoc工具在windows下编译.proto文件,下载地址为https://github.com/protocolbuffers/protobuf/releases,选择适合自己的环境下载即可(可能还需要设置环境变量,如果没有现成的工具,可选择编译源码)

编写.proto文件

本次所提供的.proto文件,包含Airline.proto、Speed.proto、Location.proto和Datainfo.proto四个,其中Datainfo.proto中嵌套其他三个文件的Message:
技术分享图片

使用protoc.exe编译proto文件

按照以下方式执行(cmd和git bash皆可):
技术分享图片

红框中的commonjs是为了在nodejs中使用commonjs方式进行使用,编译过后会生成js文件,并且在文件名后加上_pb后缀,例如上图中就会生成Airline_pb.js文件,其中有些关键函数:

SerializeBinary 序列化函数
技术分享图片

DeserializeBinary 反序列化函数
技术分享图片

一般的步骤是后端将经过序列化的二进制数据发送给前端,前端再反序列化得到实际的数据,除了上述两函数外,还有一些get、set函数等,该插件最后通过以下方式,将proto.pbdata暴露出去,供程序使用:
技术分享图片

其他proto文件编译后的情况与上述一致。

编写后端websocket服务

前后端采用websocket进行通讯,为了方便测试,直接在ws建立连接时,就发送二进制数据,该数据的通过②所述的插件中set函数设置(有点像设置类中变量),例如:
技术分享图片

技术分享图片

编写简单前端页面

前端采用H5的webSocket对象建立长连接,这里注意要设置以下接收数据的方式(只需要在client端设置):
技术分享图片

如果不设置为arraybuffer,得到的二进制数据为默认的blob类型(还不知blob数据应该怎么使用)。
因为前端需要对接收到的二进制数据进行反序列化,所以要将②中的nodejs插件转化成浏览器可用的js文件,再在html上引用,这里采用browserify(需要npm 全局安装)将commonjs形式的模块转换成浏览器可使用的模块:(函数名和功能不变)
技术分享图片

生成的js文件,可直接在html上通过script引用,在ws监听message中进行deserializeBinary反序列化操作:
技术分享图片

结果:

技术分享图片

与服务端设置的一致。

google-protocol与protocol.js的区别:google-protocol生成相应语言的插件进行使用,protocol.js通过直接load需要使用的proto文件,配合一些封装好的函数使用(还有待测试验证)。

protocol buffer——nodejs中的实践

原文:https://www.cnblogs.com/Mr-Kahn/p/12728374.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!