(運行場景 所有設備啟動后 需要不間斷的發送請求 然后接收請求 獲取很多設備的運行狀態 )
通過與采集工控機去對接 對方工程師要求用ProtoBuf去轉換對象傳送數據 說是運行起來 會比json節省資源 速度會比json反應快些
回來查資料學習了一下
需要一下幾步
第一步 創建 .proto 文件
//交互接口協議 syntax = "proto3"; package dome_mm; message sss_c { int32 s1 = 1; string s2 = 2; double s3 = 3; }
詳細說明下
syntax = "proto3"; 交互接口協議
dome_mm 是命名空間
sss_c 對象類
s1,s2,s3 字段
第二步 運行生成 .cs 類
這里運行時只運行 protoc.exe這個程序
https://github.com/protocolbuffers/protobuf/releases/tag/v3.8.0
東西在這里面下載 我用的是這個protoc-3.8.0-win64.zip
然后進入命令窗口 cd+空格+文件夾路徑 跳到protoc.exe程序文件夾
輸入 protoc ./test.proto --csharp_out=./
test.proto是創建的.proto文件
執行命令后 會生成 .cs 文件 直接扔到項目中
第三步 編寫序列化和反序列化類
public class Protobuff { /// <summary> /// 序列化 /// </summary> public static byte[] Serialize<T>(T obj) where T : IMessage { return obj.ToByteArray(); } /// <summary> /// 反序列化 /// </summary> public static T Deserialize<T>(byte[] data) where T : class, IMessage, new() { T obj = new T(); IMessage message = obj.Descriptor.Parser.ParseFrom(data); return message as T; } }
第四步 可以肆無忌憚的使用了
sss_c sc = new sss_c(); //對象序列化 var bytes = Protobuff.Serialize<sss_c>(sc); //對象反序列化 var recv = Protobuff.Deserialize<sss_c>(buff);