簡介node
gRPC,google的遠程過程調用框架,傳輸協議使用 HTTP2, 序列化協議使用 protobuf。
gRPC 使用 HTTP2 傳輸協議傳輸 protobuf 序列化的二進制數據,有極高的效率、極低的資源佔用率。
github倉庫地址:https://github.com/grpc/grpc,該倉庫包含在共享C核心庫src / core之上編寫的多種語言(C++, Python, Ruby, Objective-C, PHP, C#)實現的gRPC庫的源代碼。
gRPC的一些特性:c++
- 簡單的服務定義
- 跨語言和平臺工做
- 快速啓動並擴展
- 雙向流媒體以及身份驗證集成
使用GRPC幾大核心步驟
1)Defining a service 定義服務(在.proto文件中這個是和後臺交互的主要協議)
2)Generating grpc code 生成grpc代碼
3)Writing a server 服務端編寫必定的服務提供給客戶端使用(相似接口)
4)Server implementation 服務的實現
5)Writing a client 編寫客戶端代碼(集成grpc)
6)Calling an rpc 根據RPC協議(.proto文件約定的協議)進行代碼(接口)調用
優勢:客戶端充分利用高級流和連接功能,從而有助於節省帶寬、下降的TCP連接次數、節省CPU使用、和電池壽命。git
Objective-C Quick Start
系統需求github
- 最小iOS版本爲7.0,即iOS version >=7.0
- OS X 10.11及以上,即OS X 10.11 >= 10.11
前提條件
一、CocoaPods >= 1.0 檢查Cocoapods版本:pod –version
$ sudo gem install cocoapods
$ pod setup
PS:CocoaPods是iOS開發、macOS開發中的包依賴管理工具,效果如Java中的Maven,nodejs的npm。
二、Xcode >=7.2objective-c
三、Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
PS:Homebrew是一款自由及開放源代碼的軟件包管理系統,用以簡化macOS系統上的軟件安裝過程
四、autoconf, automake, libtool, pkg-config
$ brew install autoconf automake libtool pkg-confignpm
安裝gRPC插件以及二進制庫文件windows
從https://github.com/grpc/grpc下載gRPC源碼,解壓後進入grpc目錄:
$ make
遇到錯誤:報錯很簡單,提示系統缺乏cares包ruby
從https://github.com/c-ares/c-ares下載cares包後,解壓放在/grpc/third_party/cares/cares目錄下,從新make,又報錯了~,提示缺乏OpenSSL,我勒個去,安裝一個缺一個,什麼時候是個頭啊!grpc的third_party中只是給出了庫的倉庫地址,可是實際編譯時須要的時third_party的所有源碼文件。服務器
有效解決方法:Git源碼編譯(須要網絡良好):
$ git clone --recursive -b v1.23.0 https://github.com/grpc/grpc.git
$ cd grpc
$ git submodule update --init
$ make
$ [sudo] make install
完成後會把gRPC的頭文件安裝在/usr/local/include,在程序中可直接包含使用,連接庫則安裝在/usr/local/lib中,供程序編譯成功後連接使用。網絡
安裝protoc編譯器
$ brew tap grpc/grpc
$ brew install protobuf
運行Server
對於此示例應用程序,咱們須要在本地計算機上運行的gRPC服務器。gRPC Objective-C API支持建立gRPC客戶端,但不支持建立gRPC服務器。所以,咱們在同一個存儲庫中構建並運行C ++服務器:
$ cd examples/cpp/helloworld
$ make
$ ./greeter_server &
C++服務端進程greeter_server運行起來了~
運行Client
1)生成客戶端庫和依賴項
$ cd ../../objective-c/helloworld
$ pod install
2)運行客戶端app
$ open HelloWorld.xcworkspace
這將使用Xcode打開應用程序項目。經過按Xcode窗口左上角的「運行」按鈕,在iOS模擬器中運行應用程序。你能夠檢查main.m中的調用代碼,並在Xcode的控制檯中查看結果。代碼將包含字符串「Objective-C」的HLWHelloRequest發送到本地服務器。服務器響應HLWHelloResponse,其中包含一個字符串「Hello Objective-C」,而後輸出到控制檯。
恭喜!您剛剛使用gRPC成功運行了iOS模擬器客戶端-C++服務器應用程序。
iOS真機測試
插入iphone,Xcode識別iphone,並選擇爲當前設備,配置工程簽名信息,構建運行便可!
因爲個人Mac OS是在實體機的虛擬機中運行,而實體機使用的是有線光纖網絡,和iphone手機所使用的無線網絡不在同一個局域網內,因此沒法網絡聯通。
個人筆記本(Windows7 x64)使用的是無線網絡,ip地址192.168.2.15,iphone手機ip地址192.168.2.231,是在同一個無線局域網內,能夠在筆記本192.168.2.15上運行該gRPC C++ HelloWorld Server程序,可是須要Windows版本的gRPC程序,編譯Windows版本的gRPC並使用其HelloWorld Demo程序可參考文章《grpc1.18.0 c++ windows visual studio 2017(vs2017)版本編譯(入門)》以及《grpc1.18.0 c++ windows visual studio 2017(vs2017)版本Helloworld示例與解析》。
我這裏直接展現最終的結果:
1) gRPC C++ HelloWorld Server
注意:因爲該服務端程序是使用VS2017 x64編譯出來的,運行時須要zlib.dll以及VS2017的一些運行時庫,因此須要安裝VS2017才能確保運行(只安裝C++開發部分組件便可)。
一點小知識:服務器端的監聽地址爲"0.0.0.0:50051",0.0.0.0在服務器端它表示本機上的全部IPV4地址,若是一個服務有多個IP地址(192.168.1.2和10.1.1.12),那麼咱們若是設置的監聽地址是0.0.0.0那麼咱們不管是經過IP192.168.1.2仍是10.1.1.12都是能夠訪問該服務的。
2) gRPC Object-C HelloWorld Client
在Xcode中將鏈接的服務器地址由@"localhost.15:50051"修改成@"192.168.2.15:50051",以後選擇所鏈接的iOS真機,運行!
測試所使用的iOS真機,借來用的:
恭喜!您剛剛使用gRPC成功運行了iOS真機客戶端-C++服務器應用程序。
參考