最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用protobufde的過(guò)程解析

 更新時(shí)間:2021年08月20日 15:17:10   作者:roy8666  
Google開(kāi)源的一個(gè)序列化框架,類似于xml , json。最大的特點(diǎn)是基于 二進(jìn)制,比傳統(tǒng)的xml表示同樣的內(nèi)容要短小很多。亦可定義一些可選字段,用于服務(wù)端與客戶端通信

概念

Protobuf(Google Protocol Buffers)是google開(kāi)發(fā)的的一套用于數(shù)據(jù)存儲(chǔ),網(wǎng)絡(luò)通信時(shí)用于協(xié)議編解碼的工具庫(kù).它和XML和Json數(shù)據(jù)差不多,把數(shù)據(jù)已某種形式保存起來(lái).Protobuf相對(duì)與XML和Json的不同之處,它是一種二進(jìn)制的數(shù)據(jù)格式,具有更高的傳輸,打包和解包效率

優(yōu)點(diǎn):

1:序列化后體積相比Json和XML很小,適合網(wǎng)絡(luò)傳輸

2:支持跨平臺(tái)多語(yǔ)言

3:消息格式升級(jí)和兼容性還不錯(cuò)

4:序列化反序列化速度很快,快于Json的處理速度

缺點(diǎn):

1、以二進(jìn)制的方式存儲(chǔ),除非你有 .proto 定義,否則你沒(méi)法直接讀出 Protobuf 的任何內(nèi)容。

2、功能簡(jiǎn)單,無(wú)法用來(lái)表示復(fù)雜的概念。

標(biāo)準(zhǔn)數(shù)據(jù)類型

一個(gè)標(biāo)量消息字段可以含有一個(gè)如下的類型——該表格展示了定義于.proto文件中的類型,以及與之對(duì)應(yīng)的、在自動(dòng)生成的訪問(wèn)類中定義的類型

img

基于序號(hào)的協(xié)議字段映射(類似key-value結(jié)構(gòu))

新建 test.proto

在消息中承載的數(shù)據(jù)分別對(duì)應(yīng)于每一個(gè)字段都有一個(gè)名字和一種類型。

syntax = "proto3";

package  WeightEstimationUpdate;
option   java_package = "com.muyuan.platform.bar.patrol.pro";
// 請(qǐng)求包基類(沒(méi)有附加數(shù)據(jù),通信包不重新定義直接使用基類包)
message BaseRequestCommon
{
  string      DeviceId = 1;    // 設(shè)備編號(hào)
  string      MsgID = 2;    // 消息ID,用UUID
  string      Timestamp = 3;    // unix時(shí)間戳(秒)
  uint32      Cmd = 4;    // 指令信息
  bytes       payLoad = 5;  // 消息體
}

// 上報(bào)
message DeviceRegist
{
  string  version = 1;    // 
  string  macAddr = 2;    // 
}

// 下發(fā)
message PushUpgradeInfo
{
  string  version = 1;            // 版本號(hào)
  string  packageName = 2;          // 
  string  packageMd5 = 3;          // 
  string  packageUrl = 4;          // 
}

// 上報(bào)
message ReportWeightEstimationStatus
{
  string      version = 1;    // 
  string      state = 2;      // 
}

// 指令列表
enum EmCmd
{
  CMD_NONE = 0x0000;       // 指令開(kāi)始范圍

  //-----------------服務(wù)器端主動(dòng)下發(fā)到設(shè)備端信令定義開(kāi)始------------------
  CMD_S2C_PUSH_UPGRADE_INFO = 0x0013;    // 下發(fā)(協(xié)議包:PushUpgradeInfo)
  //-----------------服務(wù)器端主動(dòng)下發(fā)到設(shè)備端信令定義結(jié)束-----------------

  //-----------------設(shè)備端主動(dòng)上報(bào)到服務(wù)端信令定義開(kāi)始-------------------
  CMD_C2S_REPORT_REGIST = 0x0060;   // 注冊(cè)(協(xié)議包:WeightEstimationRegist)
  CMD_C2S_REPORT_FAULT = 0x0061;   // 上報(bào)故障(協(xié)議包:ReportFault)
  CMD_C2S_REPORT_WEIGHT_ESTIMATION_STATUS = 0x0063;    // 上報(bào)狀態(tài)信息(協(xié)議包:WeightEstimationStatus)
  //-----------------設(shè)備端主動(dòng)上報(bào)到服務(wù)端信令定義結(jié)束-----------------

  CMD_END = 0xFFFF;        // 指令結(jié)束范圍
}

情況1: 收到通信信息

import test_pb2 as weight_pd
base_request_common_obj = weight_pd.BaseRequestCommon()
base_request_common_obj.ParseFromString(msg)
payload = base_request_common_obj.payLoad
push_upgrade_info_obj = weight_pd.PushUpgradeInfo()
push_upgrade_info_obj.ParseFromString(payload)
update_version = push_upgrade_info_obj.version
update_zip_filename = push_upgrade_info_obj.packageName
# 反向解析即可

情況2:發(fā)送通信信息

import test_pb2 as weight_pd
base_request_common = weight_pd.BaseRequestCommon()
base_request_common.DeviceId = deviceId
base_request_common.MsgID = str(uuid.uuid4())
base_request_common.Timestamp = str(int(time.time()))
# change
item_list = weight_pd.EmCmd.items()
#此為 protobuf 3.0.0 版本的
weight_dict = listtuple_dict(item_list)
base_request_common.Cmd = weight_dict.get("CMD_C2S_REPORT_WEIGHT_ESTIMATION_STATUS")
#此為 protobuf 最新版本  
# base_request_common.Cmd = weight_pd.EmCmd.CMD_C2S_REPORT_WEIGHT_ESTIMATION_STATUS
report_weight_estimation_status = weight_pd.ReportWeightEstimationStatus()
report_weight_estimation_status.version = self.version
report_weight_estimation_status.state = state
base_request_common.payLoad = report_weight_estimation_status.SerializeToString()
serializeToString = base_request_common.SerializeToString()
#  serializeToString 即為 二進(jìn)制數(shù)據(jù)流
def listtuple_dict(item_list):
    weight_cmd_dict = {}
    for k, v in item_list:
        weight_cmd_dict.setdefault(k, v)
    return weight_cmd_dict```

到此這篇關(guān)于python使用protobuf的文章就介紹到這了,更多相關(guān)python使用protobuf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?pandas索引的設(shè)置和修改方法

    Python?pandas索引的設(shè)置和修改方法

    索引的作用相當(dāng)于圖書(shū)的目錄,可以根據(jù)目錄中的頁(yè)碼快速找到所需的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于Python?pandas索引的設(shè)置和修改的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • python中@符號(hào)實(shí)例詳解

    python中@符號(hào)實(shí)例詳解

    @是一個(gè)裝飾器,針對(duì)函數(shù),起調(diào)用傳參的作用,下面這篇文章主要給大家介紹了關(guān)于python中@符號(hào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • RuntimeError:CUDA?out?of?memory多種場(chǎng)景下的解決方案

    RuntimeError:CUDA?out?of?memory多種場(chǎng)景下的解決方案

    若遇到RuntimeError:?CUDA?out?of?memory錯(cuò)誤,通常意味著GPU內(nèi)存不足以處理當(dāng)前的計(jì)算需求,本文就來(lái)介紹一下多種場(chǎng)景下的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • python調(diào)用百度語(yǔ)音識(shí)別api

    python調(diào)用百度語(yǔ)音識(shí)別api

    這篇文章主要介紹了python調(diào)用百度語(yǔ)音識(shí)別api,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 關(guān)于python寫(xiě)入文件自動(dòng)換行的問(wèn)題

    關(guān)于python寫(xiě)入文件自動(dòng)換行的問(wèn)題

    今天小編就為大家分享一篇關(guān)于python寫(xiě)入文件自動(dòng)換行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python微信跳一跳系列之棋子定位顏色識(shí)別

    python微信跳一跳系列之棋子定位顏色識(shí)別

    這篇文章主要為大家詳細(xì)介紹了python微信跳一跳系列之棋子定位之顏色識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Python制作旋轉(zhuǎn)花燈祝大家元宵節(jié)快樂(lè)(實(shí)例代碼)

    Python制作旋轉(zhuǎn)花燈祝大家元宵節(jié)快樂(lè)(實(shí)例代碼)

    一年一度的元宵節(jié)來(lái)臨,小編在這里祝大家2022元宵節(jié)快樂(lè),今天小編給大家分享一篇教程關(guān)于Python制作旋轉(zhuǎn)花燈祝大家元宵節(jié)快樂(lè),代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02
  • Python使用open函數(shù)的buffering設(shè)置文件緩沖方式

    Python使用open函數(shù)的buffering設(shè)置文件緩沖方式

    這篇文章主要介紹了Python使用open函數(shù)的buffering設(shè)置文件緩沖方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python 實(shí)現(xiàn)圖像快速替換某種顏色

    python 實(shí)現(xiàn)圖像快速替換某種顏色

    這篇文章主要介紹了python 實(shí)現(xiàn)圖像快速替換某種顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • PyQt5利用QPainter繪制各種圖形的實(shí)例

    PyQt5利用QPainter繪制各種圖形的實(shí)例

    下面小編就為大家?guī)?lái)一篇PyQt5利用QPainter繪制各種圖形的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論

且末县| 板桥市| 金门县| 航空| 鸡西市| 寿宁县| 满洲里市| 巩义市| 石城县| 香河县| 邮箱| 怀集县| 新河县| 金溪县| 西安市| 平湖市| 郧西县| 周至县| 汤阴县| 榆中县| 句容市| 耒阳市| 益阳市| 盖州市| 洞头县| 石城县| 定西市| 盐津县| 礼泉县| 福鼎市| 巴塘县| 福贡县| 仙居县| 三原县| 威宁| 滦南县| 河津市| 巴彦县| 神木县| 丹棱县| 崇州市|