# HTTPUseProtoBuf **Repository Path**: mdgsf/HTTPUseProtoBuf ## Basic Information - **Project Name**: HTTPUseProtoBuf - **Description**: HTTP使用protobuf格式通信,客户端测试工具 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 1 - **Created**: 2017-12-01 - **Last Updated**: 2023-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTTP使用protobuf格式通信,客户端测试工具 ## 简介 如果你的web服务器使用json传输数据(或其他明文格式的数据),那就不用往下看了,用**postman**这个工具测试就好了,很好用。 如果你的web服务器使用protobuf传输数据,那就继续看下去吧。 ## 目录说明 1. server: web服务器,Go实现。 2. client: 发送protobuf数据的测试工具,C++实现。 3. example: 示例,可以直接运行。 4. proto: protobuf格式的协议。 5. MockGetIndex: 测试Get请求,没有携带数据。 6. MockJsonPostLogin: 测试Post请求,发送json格式的数据。 7. MockProtoPostArr: 测试Post请求, 发送protobuf格式的数据。 8. MockProtoPostRegister: 测试Post请求, 发送protobuf格式的数据。 9. MockProtoPostWrap: 测试Post请求, 发送protobuf格式的数据。 10. MockProtoPostCmplx: 测试Post请求, 发送protobuf格式的数据。 ## 例子演示 打开目录example 双击web.exe打开web服务器,地址为127.0.0.1:9090。(如果打不开的话,就自己编译,代码在server目录下) 双击client.bat,发送protobuf格式的HTTP数据。 ## 使用介绍 这是一个通过HTTP发送protobuf数据的工具,目前数字类型只支持int32。 需要提供test.json和test.proto两个文件。 **client.bat 内容如下** ```bat parseproto.exe -i "127.0.0.1" -m 9090 -u "/protoPostCmplx" -t "POST" -p "test.proto" -j "test.json" ``` ```bat $ ./parseproto.exe -h -i "127.0.0.1", web server ip address. -m 9090, web server port. -u "/protoPostWrap", URI. -t "POST", HTTP type, get, post. -p "test.proto", proto file path. -j "test.json", json file path. -h, help. ``` **test.proto** 这个test.proto就是客户端和服务器之间实际使用的通信协议。 ``` syntax = "proto2"; package GoBusinessDemo; message MsgCmplx { optional MsgOuter out = 1; required Register reg = 2; repeated int32 money = 3; optional string tag = 4; } message MsgOuter { optional MsgInner in = 1; } message MsgInner { optional string name = 1; } message Register { optional string username = 1; optional string password = 2; optional int32 age = 3; optional string email = 4; } ``` 如果你想要构造一个MsgCmplx结构体的数据发送出去,那么只需要在test.json中填上如下内容: json写好之后,麻烦先复制到这个网站上检查下你写的json格式是不是有错:https://www.bejson.com/。 还有,如果在test.json中填写一些test.proto中找不到的字段,程序也会挂掉。 ```json { "MsgCmplx": { "out": { "in": { "name": "I'm inner." } }, "reg": { "username": "huangjian", "password": "123", "age": 28, "email": "1342042894@qq.com" }, "money":[1,2,3,4,5,6,7,8], "tag":"This is a tag." } } ``` test.proto 和 test.json 都填好之后,点击client.bat就可以发送数据出去了。 这个工具的主要作用就是**把这个json内容变成protobuf格式的内容,作为HTTP发送出去**。 测试之前要记得先把web服务器打开。 进入目录 server\web.go, 执行go run web.go开启web服务器。 ## Web服务器接口分类 1. HTTP类型接口 2. Websocket类型接口 Websocket接口是一个长连接,很多时候客户端都是有状态的,很难模拟客户端进行测试,所以这里只考虑HTTP类型的接口测试。 ## HTTP请求分类 1. HTTP Get 2. HTTP Post 3. Put, Delete, .... 我们最经常使用的也就是Get和Post。 HTTP请求分为两个主要部分,url和数据。 Get请求的数据是和url整合在一起的,作为url的一部分发送到web服务器端的。 Post请求的数据一般都是放在body部分的。 测试的时候要考虑测试的接口是否需要携带数据: 1. 不需要携带数据 2. 需要携带数据 如果不需要携带数据,那测试就非常简单,直接用**浏览器**就可以测试了。 如果需要携带数据,那就比较麻烦了,Get请求的数据是放在url中的,相对比较简单,例如: http://127.0.0.1:9090/login?username=huangjian&password=123 这里主要讨论下Post携带数据。 ## 数据的分类 1. 简单的文本 2. json格式数据 3. xml格式数据 4. csv格式数据 5. protobuf格式数据 这里列出了一共5种常用的数据格式,前面4种都是可以手动编辑的,也就是测试起来非常方便(测试工具:**postman**)。 而第5种,也就是protobuf格式的数据就比较坑了,是二进制格式的,无法手动编辑,所以就有了这个项目。 ## json和protobuf格式的对比 json明文传输,protobuf二进制编码传输。就是说同样的数据量,protobuf速度更快。但是一般只有传输的数据很多的时候,才会有区别。如果你只是传输几K的数据的话,几乎没什么区别。当然,如果传输的数据量达到了几百M或几百G的时候,那肯定选protobuf,不过这种时候,我们自己一般也都会做数据压缩。 json测试的时候方便得多,建议直接使用json就好了。 如果是长连接的话,需要不断进行通讯,那就选择protobuf。