網絡協議序列化工具Protobuf

目錄

  • 前言
  • 一、下載
    • 注意
  • 二、解壓安裝
  • 三、Protobuf的使用
    • 1、創建.proto文件
    • 2、利用protoc編譯.proto文件

前言

Protocol Buffers是Google的?種語??關、平臺?關、可擴展的序列化結構數據的?法,它可?于(數據)通信協議、數據存儲等。
Protocol Buffers類?于XML,是?種靈活,?效,?動化機制的結構數據序列化?法,但是?XML更?、更快、更為簡單。
你可以定義數據的結構,然后使?特殊?成的源代碼輕松的在各種數據流中使?各種語?進?編寫和讀取結構數據。你甚?可以更新數據結構,?不破壞由舊數據結構編譯的已部署程序。

一、下載

下載路徑:https://github.com/protocolbuffers/protobuf/releases
如果鏈接打不開,需要下載 protoc-29.5-win64,可點擊這里下載 https://download.csdn.net/download/weixin_45961836/91668744

點擊鏈接打開頁面,滑到下面可以看到
在這里插入圖片描述

選擇對應的版本

如果沒有對應的版本,例如win64,可滑動到下面,選擇其它版本
在這里插入圖片描述

點擊打開之后,可以看到有win64,點擊下載即可
在這里插入圖片描述

注意

在這里插入圖片描述
Rc版本:全稱release candidate 正式候選版,不建議選。

二、解壓安裝

解壓壓縮包,解壓出來的文件目錄
在這里插入圖片描述
復制 bin文件路徑 到 環境變量-系統變量Path
例如:D:\protoc-29.5-win64\bin
在這里插入圖片描述
Win + R 打開運行窗口,輸入

protoc --version

輸出結果
在這里插入圖片描述
安裝成功!!

三、Protobuf的使用

官網文檔:https://protobuf.com.cn/overview/

1、創建.proto文件

創建一個.proto文件

syntax = "proto3";
package contacts;message PeopleInfo{string name = 1;int32 age = 2;
}

我們需要在這個PeopleInfo.proto文件中完成一些初始化工作。比如:指定PB語法版本、為當前.proto文件中的數據指定作用域;

關鍵字 syntax
我們可以利用來指定當前.proto文件鎖采用的語法版本

syntax = "proto3";

注意這個語法版本聲明需要放在當前.proto文件的首行(注釋不算一行),其次就是我們一般都是需要指定當前.proto文件所采用的語法版本為"proto3"的版本,如果不指定的話 .proto文件默認采用 proto2 語法進行編譯,proto2語法相對于proto3語法在編程語言支持上沒有proto3廣,同時對于一些語法的支持也不是很好,為此實際開發中我們通常采用proto3語法來編譯當前文件。

關鍵字 package
我們也可以為當前文件中定義的類聲明一個命名空間,來避免不同 .proto之間的命名沖突的問題,這一點我們可以利用關鍵字來實現:

package contacts;

當然,這個命名空間的定義并不是強制的,但是為了養成良好的編程習慣,我們還是希望能將其定義出來。package 定義的命名空間在經過protoc編譯器編譯過后會變為C++中的namespace 命名空間,其中包含著在當前.proto文件中定義的各種類;

關鍵字 message
初始化工作都完成的差不多了,我們就可以開始定義類了,在.proto文件中定義類是利用 message 關鍵字來完成的

message PeopleInfo{string name = 1;int32 age = 2;
}

在message 定義的類中,我們只需要定義出該類所包含的屬性即可,同時我們需要給這些屬性進行編號,并且每個同級屬性之間不能重復,這是PB語法要求的;
因此在message 中定義的字段格式如下:

message xx{//其中同級屬性之間num不能重復type name = num;
}

2、利用protoc編譯.proto文件

編譯命令:

protoc --csharp_opt=.  xx.proto

在這里插入圖片描述
執行成功!

在這里插入圖片描述
Test.cs 是編譯后的結果,引入項目中使用即可。

Protobuf的使用可參考 https://blog.csdn.net/t5y22/article/details/142169446

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92998.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從表單校驗到API網關:全鏈路輸入安全防護指南

從表單校驗到 API 網關:全鏈路輸入安全防護指南 在軟件系統的安全防御體系中,輸入安全是第一道防線,而這道防線的堅固程度直接決定了系統抵御外部攻擊的能力。從用戶在瀏覽器中填寫表單的那一刻起,到數據經過 API 網關流轉至后端服務,每一個環節都可能成為輸入攻擊的突破…

Flask vs Django:微框架與一站式對決

Flask 簡介 1、簡介 Flask誕生于2010年,是Armin ronacher用Python語言基于Werkzeug工具箱編寫的輕量級Web開發框架,又稱之為微框架。 "微"的含義:Flask旨在保持核心簡潔,本身相當于內核,其他功能需通過擴展…

真實業務場景:mysql慢查詢優化(從17秒的查詢優化到700毫秒)

慢查詢業務場景:原先在我們系統中要統計一些人員的單位 部門信息的數據情況,比如總的男女人數,每個單位下的男女人數等等,然后原來的sql是這樣寫的 根據一個單位的id 然后對一張表做出多個子查詢進行查詢,這時候統計記錄 由于加載…

遠程影音訪問:通過 cpolar 內網穿透服務使用 LibreTV

文章目錄前言【視頻教程】1.關于LibreTV2.docker部署LibreTV3.簡單使用LibreTV4.安裝cpolar內網穿透5.配置ward公網地址6.配置固定公網地址總結LibreTV 與 cpolar 的協同應用,為用戶打造了一條通往高清觀影自由的便捷之路。通過這一方案,用戶不僅擺脫了商…

Apache ECharts 6 核心技術解密 – Vue3企業級可視化實戰指南

簡介 ECharts 是百度開源的一個使用 JavaScript 實現的開源可視化庫,它能夠生動、可交互地展示數據。在 Vue3 項目中集成 ECharts 可以讓你的項目更加直觀和動態地呈現數據信息。 核心優勢 特性SVG渲染器Canvas渲染器縮放保真度★★★★★★★☆☆☆動態交互性能…

考公VS考研,拼哪個性價比高?

即將到來下半年,將迎來考公和考研是兩個非常重要的考試,也是許多年輕人為之奮斗的目標。無論是獲得一份穩定的“鐵飯碗”,還是提升學歷學位獲得更高的競爭力,都是值得努力的方向。那么,考公vs考研,到底哪個…

python2操作neo4j

環境依賴 jdk、neo4j圖數據庫 操作一條數據完整demo import os,json,sys,io from py2neo import Graph,Nodetry:sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)sys.stderr io.TextIOWrapper(sys.stderr.buffer, encodingutf-8) except Exception:passcla…

AI 編程實踐:用 Trae 快速開發 HTML 貪吃蛇游戲

1. 背景與目標 貪吃蛇是最適合入門的 2D 網頁小游戲之一:規則簡單、反饋清晰、可擴展空間大(穿墻模式、道具、多食物、排行榜……)。 demo地址:https://game.haiyong.site/snake-game.html 本項目的目標是: 純前端、…

FreeRTOS-C語言指針筆記

文章目錄一級指針指針基本概念指針使用示例代碼說明二、二級指針二級指針重點解析一級指針 C語言中的指針是一個非常重要的概念,它存儲了變量的內存地址。指針的使用可以使程序更加高效,尤其在處理數組、字符串和動態內存分配時。 指針基本概念 指針變…

界面布局智能建議生成:從功能需求到專業UI的AI加速之路

內容簡介: 傳統界面設計讓產品經理陷入"不懂設計、等設計師"的困境,效率低下還容易被挑刺。本文深度解析DeepSeek驅動的界面布局智能生成技術,通過DESIGN框架提示詞模板,讓產品經理在30分鐘內生成3種專業級界面方案,實現…

【BLE系列-第三篇】數據鏈路層(LL):廣播/連接/掃描流程詳解

目錄 引言 一、廣播及連接建立 1.1 廣播類型 1.2 掃描/連接請求與響應 1.2.1 廣播流程說明 1.2.1.1 廣播流程示例圖 1.2.1.2 廣播信息設置 1.2.1.3 信道廣播 1.2.1.4 信道切換 1.2.1.5 廣播間隔 1.2.1.6 接收窗口與理論最小傳輸時間 1.2.2 掃描/連接流程說明 1.2.…

JMeter 測試 WebSocket 接口的詳細教程

1. 安裝 WebSocket 插件 方法一:通過 Plugins Manager 下載并安裝 JMeter Plugins Manager在 JMeter 中:Options → Plugins Manager搜索 WebSocket 并安裝 方法二:手動安裝 下載 jmeter-websocket-samplers 插件將 jar 文件放到 JMeter/…

飛算JavaAI智慧教育場景實踐:從個性化學習到教學管理的全鏈路技術革新

目錄一、智慧教育核心場景的技術突破1.1 個性化學習路徑推薦系統1.1.1 學習者能力建模與評估1.2 智能教學管理系統1.2.1 自動化作業批改與學情分析1.3 教育資源智能管理系統1.3.1 教育資源智能標簽與推薦二、智慧教育系統效能升級實踐2.1 教育數據中臺構建2.1.1 教育數據整合與…

Java面試場景題大全精簡版

1.分布式系統下如何實現服務限流核心算法:固定窗口:將時間劃分為固定窗口(如 1 秒),統計窗口內請求數,超過閾值則限流。實現簡單但存在臨界值突發流量問題。滑動窗口:將固定窗口拆分為多個小窗口…

紅帽 AI 推理服務 (vLLM) - 入門篇

《教程匯總》 RedHat AI Inference Server 和 vLLM vLLM (Virtual Large Language Model) 是一款專為大語言模型推理加速而設計的框架。它是由加州大學伯克利分校 (UC Berkeley) 的研究團隊于 2023 年開源的項目,目前 UC Berkeley 和 RedHat 分別是 vLLM 開源社區…

Sql server 命令行和控制臺使用二三事

近來遇到了幾件關于sql server的事情。 第一:低版本sqlserver備份竟然無法還原到高版本 奇怪!從來未碰到過。過程如下: 1.在低版本上中備份好了數據庫 2.通過共享將文件拷貝到新服務器上 3.打開控制臺,還原數據庫,結果…

vue excel轉json功能 xlsx

需求: 完成excel表格內容轉json,excel表格內可能存在多個表格,要求全部解析出來。完成表格內合服功能,即:提取表格內老服務器與新服務器數據,多臺老服務器對應合并到一臺新服務器上 3.最終輸出結果為:[{‘1…

Qwen-OCR:開源OCR技術的演進與全面分析

目錄 一、Qwen-OCR的歷史與發展 1.1 起源與早期發展(2018-2020) 1.2 技術突破期(2020-2022) 1.3 開源與生態建設(2022至今) 二、技術競品分析 2.1 國際主流OCR解決方案對比 2.2 國內競品分析 三、部署需求與技術規格 3.1 硬件需求 3.2 軟件依賴 3.3 云部署方案 四、…

可視化+自動化:招聘管理看板軟件的核心技術架構解析

引言:現代招聘的挑戰與轉型隨著全球化和科技的迅速發展,企業的人力資源管理面臨著前所未有的挑戰。尤其是在招聘環節,隨著人才市場的競爭日益激烈,企業必須在確保招聘質量的同時,提升招聘效率。這不僅要求招聘人員具備…

【數據結構】——棧(Stack)的原理與實現

目錄一. 棧的認識1. 棧的基本概念2.棧的基本操作二. 棧的核心優勢1. 高效的時間復雜度2. 簡潔的邏輯設計3. 內存管理優化三. 棧的代碼實現1.棧的結構定義2. 棧的初始化3. 入棧 (動態擴容)4. 出棧5. 取棧頂數據6. 判斷棧是否為空7. 獲取棧的數據個數8.銷毀…