protobuf简单测试应用

protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo:

首先是.proto文件:

package desktop;
syntax = "proto3";
message helloworld
{
    required int32 id = 1;      // id
    required string str = 2;    // str
    optional int32 opt = 3;     // optional field
}

然后是一个测试的nodejs程序,主要是加载.proto文件->实例化message->message buffer化->将buffer保存进log文件:

var ProtoBuf = require("protobufjs");
var PORT = 33333;
var HOST = '127.0.0.1';

var fs = require('fs');

var root = ProtoBuf.loadSync("./desktop.helloworld.proto"),
    HelloWorld = root.lookupType("desktop.helloworld");

var hw = {
    'id': 101,
    'str': 'helloworld!'
}

var errMsg = HelloWorld.verify(hw)
console.log(errMsg)
if (errMsg) {
    throw errMsg
} else {
    var message = HelloWorld.create(hw)
    var buffer = HelloWorld.encode(message).finish()
    var message = HelloWorld.decode(buffer)
    console.log(message)
    fs.writeFile('./test.log', buffer, err => {
        if (!err) {
            console.log('Done!')
        } else {
            console.err(err)
        }
    })
}

具体效果:

protobuf相比传统的xml、json,数据传输更加紧凑,二进制协议也更加高效,非常适合于各种服务间的数据交换,目前各大主流语言基本都有具体实现。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏null的专栏

Python基础——网络编程

在网络编程中主要是使用Socket(套接字)进行编程,套接字相当于应用程序访问下层网络的服务的接口,使用Socket可以是得不同主机之间进行通信,从而实现数据交...

3394
来自专栏Android干货园

Mac Pro 下搭建maven环境

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48...

792
来自专栏上善若水

002工具及环境之查看当前局域网有那些IP在线

用Arp -a命令,查询MAC数据 除去尾数为255的广播地址,剩下的就是当前电脑的在线列表

503
来自专栏西安-晁州

protobuf简单测试应用

protobuf是google推出的一种数据交换协议,比较适合应用于底层服务交互,nodejs提供protobufjs包的实现,下面是一个简单的测试demo: ...

2560
来自专栏技术支持log

yum 安装 iotop 命令使用报错

解决方案: 修改 /usr/lib/python2.7/site-packages/iotop/data.py 文件:

720
来自专栏移动端周边技术扩展

trunk push后找不到自己的库

1344
来自专栏Java技术栈

Spring Boot整合Thymeleaf模板引擎

什么是Thymeleaf Thymeleaf是一款用于渲染XML、XHTML、HTML5内容的模板引擎。类似Velocity,FreeMaker模板引擎,它也可...

3344
来自专栏java小白

IDEA快捷键生成serialVersionUID

2416
来自专栏java一日一条

HTTP协议之HTTP的结构

会使用电脑的人基本上都会使用IE/Firefox/Chrome等网页浏览器的地址栏输入url地址来访问一个网站,那么网站页面是怎么展现到用户面前的呢?当然web...

612
来自专栏我的博客

WordPress博客文章结尾加上“转载请注明来源”等字样

找到single.php页面(注意可以在后直接编辑) 在博客里随便找一个文章点开,然后查看文章最后的地方,点击查看源代码,然后找到 image.png <div...

2453

扫码关注云+社区