<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                >[info] 原文地址:http://www.grpc.io/docs/guides/ 本文向你介紹gRPC和protocol buffers。gRPC可以使用protocol buffers作為它的IDL(Interface Description Language),同時也可以將它作為底層消息交換格式。如果你剛開始接觸gRPC以及protocol buffers,正好可以閱讀此文。 **Overview** 在gRPC中,一個客戶端程序可以直接調用一個服務端程序中的方法,這個服務端程序可以是在另外一臺機器上,調用起來就像它是一個本地對象,這就方便你創造分布式的應用和服務。正如需要RPC系統那樣,gRPC的思想基礎也是:定義一個服務,然后指定方法可以通過參數和返回類型,來遠程調用它們。在服務端,程序實現這個接口,并且運行一個gRPC服務器來處理客戶端調用。在客戶端,有一個存根(stub,即為用任何語言寫的客戶端程序),它提供了和服務端相同的方法。 ![](https://box.kancloud.cn/ea5fd699e9b041e8d71463892e81b4d6_513x329.png) gRPC客戶端和服務器可以相互通信,并能夠在多變的環境里正常運行,從Google的服務器到你自己的桌面端,并且可以使用任何gRPC支持的語言編寫。所以,比如,你可以很容易的用Java實現一個gRPC服務端,然后用Go,Python或Ruby實現一個客戶端。此外,最新的Google APIs將會有他們接口的gRPC版本,讓你在應用中,方便的使用Google的功能。 **使用Protocol Buffers** gRPC默認使用[protocol buffers](https://developers.google.com/protocol-buffers/docs/overview),它是Google的一個成熟開源框架,用來序列化結構化的數據(盡管它也可以使用其它的數據格式,比如JSON)。這里簡要介紹它是如何工作的。如果你已經很熟悉protocol buffers,可以跳過該部分 使用protocol buffers的第一步是,在一個*proto*文件中定義你想序列化的數據的結構:它是一個普通的文本文件,以`.proto`擴展名結尾。protocol buffer的數據被結構化為消息,每一個`message`都是一個小的邏輯記錄,包含了一系列的被稱為`fields`的name-value對信息。下面是一個簡單樣例: ~~~ message Person { string name = 1; int32 id = 2; bool has_ponycopter = 3; } ~~~ 然后,當你指定完了你的數據結構,就可以使用protocol buffer編譯器`protoc`,依照之前的定義來生成數據訪問類,可以使用你喜好的任何語言。這些會為每一個field提供簡單的訪問器(例如`name()`和`set_name()`),也提供了將整個結構序列化為原生字節的方法,以及從原生字節轉換為結構化數據的方法。--所以,比如,如果你選擇使用C++語言,對以上例子執行編譯,將會生成一個叫做`Person`的類。然后你就可以使用這個類來填充,序列化,和接收Person的 protocol buffer消息。 接下來你會看到更多的細節,在普通的proto文件中,使用RPC方法的參數和返回類型定義gRPC服務,其中返回類型就是protocol buffer中已定義的各種messages: ~~~ // The greeter service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; } ~~~ gRPC還使用`protoc`和一個特殊的gRPC插件,從proto文件中生成代碼。并且,通過gRPC插件,你可以得到生成的gRPC客戶端和服務端代碼,就像上面那樣用來填充,序列化,和接收消息類型的規則protocol buffer代碼一樣。我們將會在后面看到更多細節。 你可以在[Protocol Buffers documentation](https://developers.google.com/protocol-buffers/docs/overview)中找到更多細節,而且在你選擇的語言的Quickstart中,查到如何獲取,和安裝帶有gRPC插件的`protoc`。 **Protocol buffer 版本** 因為protocol buffers作為開源項目已有一段時間,我們的案例使用了一個新的版本,叫做proto3,它有著輕量簡化的語法,一些有用的新特性,并支持很多語言,目前在Java, C++, Python, Objective-C, C#, a lite-runtime(Android Java), Ruby, 和JavaScript中都可用,這里是[下載地址](https://github.com/google/protobuf/releases), 而Go語言的生成器在[這里](https://github.com/golang/protobuf),同樣包含了每個語言的手冊文檔,并且在發布說明中,能看到和目前默認版本的主要區別。更多proto3的文檔即將發布。 一般來說,雖然你可以使用proto2(當前默認的protocol buffers版本),但我們推薦你使用proto3協同gRPC,它可以允許你使用gRPC支持的所有語言,并且避過了proto2客戶端和proto3服務端或者相反帶來的兼容性問題。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看