iOS如何集成GRPC

一.什么是GRPC?作用是什么?優(yōu)點在哪里?

定義:(Google Remote Procedure Call Protocol)谷歌遠程過程調(diào)用,根據(jù)官方文檔對grpc的介紹,grpc可以讓客戶端程序直接調(diào)用服務端不同主機上應用的方法,就像調(diào)用本地方法一樣,?方便我們創(chuàng)建分布式應用和服務

在 gRPC 里客戶端應用可以像調(diào)用本地對象一樣直接調(diào)用另一臺不同的機器上服務端應用的方法,使得您能夠更容易地創(chuàng)建分布式應用和服務。與許多 RPC 系統(tǒng)類似,gRPC 也是基于以下理念:定義一個服務,指定其能夠被遠程調(diào)用的方法(包含參數(shù)和返回類型)。在服務端實現(xiàn)這個接口,并運行一個 gRPC 服務器來處理客戶端調(diào)用。在客戶端擁有一個存根能夠像服務端一樣的方法。

gRPC 客戶端和服務端可以在多種環(huán)境中運行和交互 - 從 google 內(nèi)部的服務器到你自己的筆記本,并且可以用任何 gRPC 支持的語言來編寫。所以,你可以很容易地用 Java 創(chuàng)建一個 gRPC 服務端,用 Go、Python、Ruby 來創(chuàng)建客戶端。此外,Google 最新 API 將有 gRPC 版本的接口,使你很容易地將 Google 的功能集成到你的應用里。

gRPC 默認使用 protocol buffers,這是 Google 開源的一套成熟的結(jié)構數(shù)據(jù)序列化機制(當然也可以使用其他數(shù)據(jù)格式如 JSON)。正如你將在下方例子里所看到的,你用 proto files 創(chuàng)建 gRPC 服務,用 protocol buffers 消息類型來定義方法參數(shù)和返回類型。

總結(jié):gRPC是一個高性能、通用的開源RPC框架,其由Google主要面向移動應用開發(fā)并基于HTTP/2協(xié)議標準而設計,基于ProtoBuf(Protocol Buffers)序列化協(xié)議開發(fā),且支持眾多開發(fā)語言。gRPC提供了一種簡單的方法來精確地定義服務和為iOS、Android和后臺支持服務自動生成可靠性很強的客戶端功能庫??蛻舳顺浞掷酶呒壛骱玩溄庸δ埽瑥亩兄诠?jié)省帶寬、降低的TCP鏈接次數(shù)、節(jié)省CPU使用、和電池壽命。

基于HTTP/2標準設計

由于gRPC基于HTTP/2標準設計,所以相對于其他RPC框架,gRPC帶來了更多強大功能,如雙向流、頭部壓縮、多復用請求等。這些功能給移動設備帶來重大益處,如節(jié)省帶寬、降低TCP鏈接次數(shù)、節(jié)省CPU使用和延長電池壽命等。同時,gRPC還能夠提高了云端服務和Web應用的性能。gRPC既能夠在客戶端應用,也能夠在服務器端應用,從而以透明的方式實現(xiàn)客戶端和服務器端的通信和簡化通信系統(tǒng)的構建。

gRPC已經(jīng)應用在Google的云服務和對外提供的API中,其主要應用場景如下:

低延遲、高擴展性、分布式的系統(tǒng);同云服務器進行通信的移動應用客戶端;設計語言獨立、高效、精確的新協(xié)議;便于各方面擴展的分層設計,如認證、負載均衡、日志記錄、監(jiān)控等

使用GRPC幾大核心步驟

(1)Defining a service ?定義服務(在.proto文件中這個是和后臺交互的主要協(xié)議)

(2)Generating grpc code ?生成grpc代碼

(3)writing a server ? 編寫服務主要是服務端需要編寫一定的服務提供給客戶端使用(類似接口)

(4)server implementation ?服務的實現(xiàn)

? (5)? writing a client ? ? 編寫客戶端代碼(集成grpc)

? (6)calling an rpc ? ?根據(jù)遠程調(diào)用協(xié)議(.proto文件約定的協(xié)議)進行代碼(接口)調(diào)用

優(yōu)點:客戶端充分利用高級流和鏈接功能,從而有助于節(jié)省帶寬、降低的TCP鏈接次數(shù)、節(jié)省CPU使用、和電池壽命。

二.如何集成?

①GRPC環(huán)境搭建:

1.Install protoc with the gRPC plugin(使用GRPC插件安裝protoc)

安裝homebrew (該命令會安裝protoc和gRPC插件)

curl -fsSL https://goo.gl/getgrpc | bash -

2.安裝Cocoapods

如何安裝cocoapods詳細參見本博客cocoaPods安裝

3.為proto文件創(chuàng)建一個 文件名.podspec文件(主要是通過這個文件來關聯(lián)定義的proto協(xié)議文件并且通過cocoapods編譯生成grpc依賴庫)

Pod::Spec.new do |s|? ? s.name? ? = ''

s.version? = '0.0.1'

s.license? = '...'

s.ios.deployment_target = '7.1'

s.osx.deployment_target = '10.9'

# Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.

# You can run this command manually if you later change your protos and need to regenerate.

s.prepare_command = "protoc --objc_out=. --objcgrpc_out=. *.proto"

# The --objc_out plugin generates a pair of .pbobjc.h/.pbobjc.m files for each .proto file.

s.subspec "Messages" do |ms|

ms.source_files = "*.pbobjc.{h,m}"

ms.header_mappings_dir = "."

ms.requires_arc = false

ms.dependency "Protobuf", "~> 3.0.0-alpha-4"

end


# The --objcgrpc_out plugin generates a pair of .pbrpc.h/.pbrpc.m files for each .proto file with

# a service defined.

s.subspec "Services" do |ss|

ss.source_files = "*.pbrpc.{h,m}"

ss.header_mappings_dir = "."

ss.requires_arc = true

ss.dependency "gRPC", "~> 0.12"

ss.dependency "#{s.name}/Messages"

end

end

注意:該文件必須要名為.podspec

4.創(chuàng)建好podspec后,Cocopods可以將它安裝到你的項目中

pod init

5.在Podfile中添加:

pod '<Podspec file name>', :path => 'path/to/the/directory/of/your/podspec'

6.最后通過腳本編譯生成代碼到你的項目里

pod install

這時cocoapods通過編譯Profile文件找到(文件名).podspec文件,編譯生成一些客戶端調(diào)用服務端的代碼依賴庫

注:如果出現(xiàn)protoc-gen-objcgrpc: program not found or is not executable

要將podspec文件中

protoc -I #{src} --objc_out=#{dir} --objcgrpc_out=#{dir} #{src}/(相關的).proto

修改為

protoc -I #{src} --objc_out=#{dir} --grpc_out=#{dir} --plugin=protoc-gen-grpc=/usr/local/bin/grpc_objective_c_plugin #{src}/(相關的).proto

參考文檔:gRPC官方中文文檔? ? ??gRPC官方英文文檔? ?gRPC OC版demo

接下來既可以根據(jù)在客戶端生成的代碼依賴庫來調(diào)用服務端的協(xié)議接口獲取你所需要的數(shù)據(jù)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,606評論 19 139
  • GRPC是基于protocol buffers3.0協(xié)議的. 本文將向您介紹gRPC和protocol buffe...
    二月_春風閱讀 18,218評論 2 28
  • 由于工程項目中擬采用一種簡便高效的數(shù)據(jù)交換格式,百度了一下發(fā)現(xiàn)除了采用 xml、JSON 還有 ProtoBuf(...
    黃海佳閱讀 49,179評論 1 23
  • 最近有朋友問我有沒有用過GRPC ,我一直以為RESTful的流行讓 RPC(Remote Procedure C...
    dimsky閱讀 10,893評論 8 12
  • 2017.5.11良俊打卡: [56/100] 這次活動大家多多少少都有一些收獲。 本次活動做得好的地方: 1...
    鄭良俊閱讀 197評論 0 0

友情鏈接更多精彩內(nèi)容