从0开始学DX Mesh第六天--protobuf接口讲解和简单的protobuf编程
- 组织介绍
- 历史沿袭
- 前言
- protobuf简介
- protobuf优势
- protobuf语法讲解
- protobuf常见的数据类型
- protobuf常用特殊字符
- DX Mesh编写protobuf和RPC接口
- 第七天预告
组织介绍
DigQuant Technology点宽科技开源项目:
Direct Exchange Mesh (DX Mesh) for Web 3.0 - 面向 Web3.0 的分布式应用架构
历史沿袭
DX Mesh是由DQtech团队提出的“RPC网络+区块链网络“的双层网络设计思路,在此设计概论基础上,DX Mesh项目进行了大胆的设计,一个新的”Dual Network Architecture(DNA)“网络结构被提出。
开源项目链接:https://gitee.com/DXmesh
前言
DX Mesh提出了节点与节点传输的RPC分布式网络结构,整个DX Mesh在进行节点间工程转化和传输中涉及到多种语言,所以采用了protobuf网络传输协议。protobuf的编写和字段规定是整个DX Mesh进行工程搭建的第一步!!!
protobuf简介
Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化 。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
protobuf优势
- 序列化后体积相比Json和XML很小,适合网络传输
- 序列化反序列化速度很快,快于Json的处理速度
- 消息格式升级和兼容性还不错
- 支持跨平台多语言
protobuf语法讲解
DX Mesh用到的protobuf为protobuf3,protubuf3的语法如下图:
protobuf常见的数据类型
类型 | 说明 |
---|---|
string | 字符串类型,要求是utf-8或7-bit与ascii编码的字符串 |
bytes | 比特类型 |
bool | 布尔类型 |
int32 | 32位整型 |
int64 | 64位整型 |
float | 浮点类型 |
repeated | 数组(列表) repeated string data = 1; |
map | 字典类型 map<string, string> data = 1 |
protobuf常用特殊字符
类型 | 说明 |
---|---|
package | 包名 |
syntax | protobuf版本 |
service | 定义服务 |
rpc | 定义服务中的方法 |
stream | 定义的方法传输为流传输 |
message | 定义消息体 message User{} |
extend | 扩展消息体 extend User{} |
import | 导包 |
google.protobuf.Empty | 无参数设置、无返回值设置 |
// | 注释 |
DX Mesh编写protobuf和RPC接口
首先,创建一个TestService的文件夹,进入该文件夹,运行以下命令初始化TestService的工程:
xbuilder new -n TestService
可以看到,DX Mesh会自动生成一个source_api_0_0_1.proto的文件:
DX Mesh内置默认初始化为helloword的功能,所以可以source_api_0_0_1.proto看见:
- 定义了一个名为TestService的service服务
- 一个SayHello的RPC接口和一个EmptyParamAndReply的RPC接口
- 一个Hello的接收数据字段和一个HelloReply返回数据字段
现在我需要编写一个“学生信息转化”的功能接口:接收信息字段为学生的名字,年龄,学号,返回信息字段为“xxx学生,xx岁,该生学号为xxx”的一句话。
以下为接收信息字段的代码:
message Student_Information {
string name = 1;
int32 age = 2;
int32 Student_ID = 3;
}
以下是返回信息字段的代码:
message Ruselt {
string greeting = 1;
}
这是我编写好的source_api_0_0_1.proto文件,Change为接口名:
运行以下代码进行工程语言初始化,DX Mesh目前支持Python和Rust两种编程语言,我这里用的是Python语言:
xbuilder init -l py
可以看到生成了src文件,我们进行接口功能编写只需要关注于src\service.py文件即可:
打开src\service.py文件,可以看到DX Mesh已经初始化好了基本代码:
这里编写了一个python接收信息字段,信息字段转化,返回信息字段的功能:
接下来运行以下命令对工程进行打包:
xbuilder pack
可以看到,工程已经打包成功了
接下来运行以下命令把工程安装到xport服务上:
xbuilder install -x DX-Mesh\xport
可以看到,已经成功安装到了xport上了:
接下来修改xport\dxmesh.toml的配置文件,这里用127.0.0.1:8090ip端口(监听端)监听127.0.0.1:8091ip端口(服务端):
启动xport,可以看到XComService_0_0_1工程和TestService_0_0_1工程已经被成功启动:
这里使用postman调用一下TestService_0_0_1工程的Change接口:
- 服务端(8091端口)向xport发起调用接口请求并传输数据。
- xport接收服务端(8091端口)的接口调用请求和数据。
- xport把接收的{“name”:“yjz”,“age”:“18”,“Student_ID”:“2023”}数据传输给监听端(8090端口)。
- 监听端(8090端口)接收数据,并把{“greeting”:“yjz学生,18岁,该生学号为2023”}传输给xport。
- xport再反馈给服务端(8091端口)。
第七天预告
使用DX Mesh的xComPython组件搭建第三个工程项目–用户系统(注册、登录、修改用户信息)。
若对DX Mesh架构和实操过程中有任何问题,可评论、私信、邮箱或者加下列微信和我一起探讨学习(我的邮箱:2195745704@qq.com):