日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

解密gRPC:Protocol Buffer

來源: 責編: 時間:2023-10-25 15:48:17 286觀看
導讀在之前的文章中,我們全面介紹了gRPC,在這一部分中,我們將涵蓋Protocol Buffer,也稱為Protobuf。Protobuf標志“Protocol Buffers”這個名字有著獨特的起源。在早期,它指的是一個名為“ProtocolBuffer”的類,充當了單個方法

在之前的文章中,我們全面介紹了gRPC,在這一部分中,我們將涵蓋Protocol Buffer,也稱為Protobuf。60n28資訊網——每日最新資訊28at.com

60n28資訊網——每日最新資訊28at.com

Protobuf標志60n28資訊網——每日最新資訊28at.com

“Protocol Buffers”這個名字有著獨特的起源。60n28資訊網——每日最新資訊28at.com

在早期,它指的是一個名為“ProtocolBuffer”的類,充當了單個方法調用的緩沖區。用戶可以向此緩沖區添加標簽/值對,原始字節會存儲在其中,直到構建消息后被寫出。盡管名稱中的“buffers”部分失去了原始含義,但它一直存在。今天,我們通常使用“協議消息”來指代抽象意義上的消息,“協議緩沖區”來指代序列化消息,以及“協議消息對象”來指代解析后的內存表示。60n28資訊網——每日最新資訊28at.com

什么是Protocol Buffers?

Protocol Buffers是一種簡單的語言中立和平臺中立的接口定義語言(IDL),用于定義數據結構模式和編程接口。它支持二進制和文本線路格式,并可以與不同平臺上的許多不同線路協議一起工作。例如,看看這個簡單的proto文件(person.proto),定義了一個名為'Person'的消息。這個消息描述了一個人的屬性,包括名字,ID和可選的電子郵件地址。message Person { required string name = 1; required int32 id = 2; optional string email = 3; } 這個person.proto文件用作服務器和客戶端之間的契約。如果您想要更改這個“Person”實體的結構,或者更改請求和響應的外觀,您需要修改proto文件。Protobuf編譯器protoc由Google維護,盡管也有可選的實現。生成的代碼經過優化,以實現數據的快速序列化和反序列化。60n28資訊網——每日最新資訊28at.com

60n28資訊網——每日最新資訊28at.com

為什么選擇Protocol Buffers(Protobuf)而不是JSON?

60n28資訊網——每日最新資訊28at.com

Proto vs JSON60n28資訊網——每日最新資訊28at.com

你可能會想,既然已經有廣泛使用的序列化格式JSON,為什么要選擇Protocol Buffers(Protobuf)呢?60n28資訊網——每日最新資訊28at.com

讓我們深入探討Protobuf為什么是一個出色的選擇,以及它在解決常見數據序列化挑戰方面與JSON相比的情況:60n28資訊網——每日最新資訊28at.com

60n28資訊網——每日最新資訊28at.com

在總結一下,Protobuf和JSON各有各自的獨特優勢,Protobuf在需要效率、跨平臺兼容性和結構化數據至關重要的情況下表現出色。60n28資訊網——每日最新資訊28at.com

另一方面,當您需要可讀性強的數據或輕量級格式的簡單性更合適時,JSON仍然是一個很好的選擇。60n28資訊網——每日最新資訊28at.com

Protobuf語法

這個快速介紹為您提供了Protobuf的語法和核心概念的味道。如果您想進一步探索,我鼓勵您查看官方Protocol Buffers文檔。60n28資訊網——每日最新資訊28at.com

1.消息:數據藍圖

將Protobuf消息視為數據結構的藍圖。它們告訴您數據應該如何組織。60n28資訊網——每日最新資訊28at.com

message Recipe {string dish_name = 1;repeated string ingredients = 2;double preparation_time_minutes = 3;}

在這個例子中,我們創建了一個名為Recipe的消息,其中包含三個字段:dish_name表示菜名,ingredients表示配料列表(可以有多個),preparation_time_minutes表示制作這道菜所需的時間。每個字段都有一個唯一的編號(例如,1,2,3),用于組織。60n28資訊網——每日最新資訊28at.com

2.字段類型

Protobuf支持各種字段類型,如字符串、整數、浮點數、枚舉等等。您甚至可以嵌套消息以創建復雜的數據結構。這些字段類型確保數據結構良好,類型正確。60n28資訊網——每日最新資訊28at.com

3.字段標簽

消息中的字段可以具有標簽,確定它們是required、optional還是repeated(用于列表):60n28資訊網——每日最新資訊28at.com

  • Required字段:這些字段必須始終出現在此類型的消息中。如果在序列化消息時缺少一個必需字段,將導致錯誤。
  • Optional字段:它們可以包含在消息中,但不是必需的。如果在序列化消息時省略了可選字段,它將被視為具有默認值。
  • Repeated字段:重復字段允許在單個字段中具有相同類型的多個值。它們用于數據的列表或數組。

4.枚舉

枚舉允許您定義一組命名的常量值。當您有一個字段具有預定義選項集,例如一周的日期或產品類別時,它非常有用。60n28資訊網——每日最新資訊28at.com

enum DayOfWeek {MONDAY = 1;TUESDAY = 2;// ...}

5.注釋

您可以在Protobuf定義中包含注釋,以更好地解釋您的消息和字段。注釋可以以//開始,也可以包裝在/* ... */中。60n28資訊網——每日最新資訊28at.com

6.語法版本:規則和特性

Protobuf提供不同的語法版本,其中proto2和`proto3`是最常見的。這些版本定義了您可以在Protobuf定義中使用的規則和特性。60n28資訊網——每日最新資訊28at.com

注意:建議gRPC API使用Protocol Buffers版本3(proto3)來定義API60n28資訊網——每日最新資訊28at.com

60n28資訊網——每日最新資訊28at.com

7.導入其他文件:保持組織

對于更大的項目,您可以將Protobuf定義分成多個文件,并使用import語句將它們組合在一起。60n28資訊網——每日最新資訊28at.com

序列化和反序列化

Protobuf的線路格式是二進制編碼,因此處理起來更快。它使用一些巧妙的技巧來最小化用于表示消息的字節數。不需要了解二進制編碼格式的知識來使用Protobuf。60n28資訊網——每日最新資訊28at.com

為了真正理解Protocol Buffers(Protobuf)的威力,讓我們通過一個示例,演示數據是如何序列化和編碼,以及隨后如何解碼回來的。60n28資訊網——每日最新資訊28at.com

考慮以下數據:60n28資訊網——每日最新資訊28at.com

(我們使用前面定義的person.proto)60n28資訊網——每日最新資訊28at.com

{"name": "Ankit","id": 21,"email": "username@gmail.com"}

1.序列化和編碼

Protobuf將此JSON數據轉換為一個既高效又節省空間的二進制格式。在這種情況下,Protobuf編碼如下:60n28資訊網——每日最新資訊28at.com

0a 05 41 6e 6b 69 74 10 15 1a 12 75 73 65 72 6e 61 6d 65 40 67 6d 61 69 6c 2e 63 6f 6d60n28資訊網——每日最新資訊28at.com

2.解碼

現在,讓我們顛倒這個過程,將這個Protobuf數據解碼回其原始形式:60n28資訊網——每日最新資訊28at.com

60n28資訊網——每日最新資訊28at.com

這個解碼過程使Protobuf如此高效和強大。它確保數據保持一致和結構化,即使在編碼和解碼后,這使得它成為各種場景中數據傳輸的首選選擇。60n28資訊網——每日最新資訊28at.com

這只是一個簡單的示例,如果您有興趣,可以在Protocol Buffers網站上了解更多信息。60n28資訊網——每日最新資訊28at.com

gRPC中的Protocol Buffers

Protocol Buffers(Protobuf)在gRPC中至關重要,為客戶端和服務器之間提供了高效和一致的通信。以下是它們至關重要的原因:60n28資訊網——每日最新資訊28at.com

  • API契約定義:Protobuf為gRPC定義了消息結構,確保了高效和無錯誤的數據傳輸。
  • 高效的序列化:Protobuf的二進制格式加速了數據序列化和反序列化,提高了gRPC的性能。
  • 語言中立性:Protobuf的語言不可知性使其能夠無縫集成到各種編程語言中。
  • 高效性:Protobuf的二進制格式減少了網絡使用,使數據傳輸更快。
  • 互操作性:Protobuf充當通用翻譯器,使gRPC服務能夠在不同語言和平臺之間輕松通信。
  • 向后兼容性:Protobuf的版本支持允許API演進而不破壞現有客戶端。
  • 代碼生成:Protobuf簡化了消息結構代碼生成,簡化了開發流程。
  • 性能:Protobuf的高效序列化和反序列化增強了gRPC服務的整體性能。

讓我們包括一個使用Protocol Buffers(Protobuf)定義的gRPC服務的示例。假設我們正在構建一個帶有用戶身份驗證的聊天應用程序。60n28資訊網——每日最新資訊28at.com

這是我們服務的Protobuf定義:60n28資訊網——每日最新資訊28at.com

syntax = "proto3";message User {string id = 1;string username = 2;}message Message {string id = 1;string text = 2;User sender = 3;}service ChatService {rpc SendMessage(Message) returns (Message);rpc GetMessages(User) returns (stream Message);}

在這個示例中,我們定義了兩種消息類型,User和Message,以及一個允許發送和接收消息的ChatService。使用Protobuf,這個服務定義清晰、簡潔,并且可以輕松地生成成各種編程語言的代碼。60n28資訊網——每日最新資訊28at.com

總之,Protocol Buffers(Protobuf)已經徹底改變了數據序列化、傳輸和在不同系統中的理解方式。它們的效率、跨平臺兼容性和結構化數據處理使它們成為現代應用程序的強大選擇。60n28資訊網——每日最新資訊28at.com

通過了解Protobuf的語法、核心概念以及它在gRPC中的作用,您可以充分利用它的功能。在探索Protobuf的世界時,請記住官方Protocol Buffers文檔是深入了解這項技術的綜合指南。60n28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-14816-0.html解密gRPC:Protocol Buffer

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: DISC-FinLLM:復旦大學團隊發布中文智慧金融系統,采用多專家微調框架

下一篇: Java項目:垃圾回收操作頻繁導致系統性能下降

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開始學習反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無法成功對代碼進行反混淆,尤其是使用自定義混淆器對其進行混淆時。什么是混
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結?,F在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 華為Mate 60系列用上可變靈動島:正式版體驗將會更出色

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • 2022爆款:ROG魔霸6 冰川散熱系統持續護航

    喜逢開學季,各大商家開始推出自己的新產品,進行打折促銷活動。對于忠實的端游愛好者來說,能夠擁有一款夢寐以求的筆記本電腦是一件十分開心的事。但是現在的
Top 主站蜘蛛池模板: 普安县| 碌曲县| 谢通门县| 固镇县| 彰化市| 青岛市| 进贤县| 柳江县| 宁陕县| 英德市| 林西县| 辉南县| 彭水| 绥芬河市| 保亭| 平度市| 遵化市| 永仁县| 常山县| 运城市| 老河口市| 安达市| 台北县| 横峰县| 伽师县| 青川县| 台东市| 怀远县| 垦利县| 长葛市| 罗江县| 长阳| 伊金霍洛旗| 卢湾区| 文安县| 灵石县| 屏边| 密云县| 会泽县| 丹江口市| 徐水县|