iOS如何集成GRPC

一.什么是GRPC?作用是什么?优点在哪里?

定义:(Google Remote Procedure Call Protocol)谷歌远程过程调用,根据官方文档对grpc的介绍,grpc可以让客户端程序直接调用服务端不同主机上应用的方法,就像调用本地方法一样,�方便我们创建分布式应用和服务

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

gRPC 客户端和服务端可以在多种环境中运行和交互 - 从 google 内部的服务器到你自己的笔记本,并且可以用任何 gRPC 支持的语言来编写。所以,你可以很容易地用 Java 创建一个 gRPC 服务端,用 Go、Python、Ruby 来创建客户端。此外,Google 最新 API 将有 gRPC 版本的接口,使你很容易地将 Google 的功能集成到你的应用里。

gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如 JSON)。正如你将在下方例子里所看到的,你用 proto files 创建 gRPC 服务,用 protocol buffers 消息类型来定义方法参数和返回类型。

总结:gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。

基于HTTP/2标准设计

由于gRPC基于HTTP/2标准设计,所以相对于其他RPC框架,gRPC带来了更多强大功能,如双向流、头部压缩、多复用请求等。这些功能给移动设备带来重大益处,如节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。同时,gRPC还能够提高了云端服务和Web应用的性能。gRPC既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现客户端和服务器端的通信和简化通信系统的构建。

gRPC已经应用在Google的云服务和对外提供的API中,其主要应用场景如下:

低延迟、高扩展性、分布式的系统;同云服务器进行通信的移动应用客户端;设计语言独立、高效、精确的新协议;便于各方面扩展的分层设计,如认证、负载均衡、日志记录、监控等

使用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    根据远程调用协议(.proto文件约定的协议)进行代码(接口)调用

优点:客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。

二.如何集成?

①GRPC环境搭建:

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文件创建一个 文件名.podspec文件(主要是通过这个文件来关联定义的proto协议文件并且通过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.创建好podspec后,Cocopods可以将它安装到你的项目中

pod init

5.在Podfile中添加:

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

6.最后通过脚本编译生成代码到你的项目里

pod install

这时cocoapods通过编译Profile文件找到(文件名).podspec文件,编译生成一些客户端调用服务端的代码依赖库

注:如果出现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

接下来既可以根据在客户端生成的代码依赖库来调用服务端的协议接口获取你所需要的数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • GRPC是基于protocol buffers3.0协议的. 本文将向您介绍gRPC和protocol buffe...
    二月_春风阅读 17,973评论 2 28
  • 由于工程项目中拟采用一种简便高效的数据交换格式,百度了一下发现除了采用 xml、JSON 还有 ProtoBuf(...
    黄海佳阅读 48,501评论 1 23
  • 最近有朋友问我有没有用过GRPC ,我一直以为RESTful的流行让 RPC(Remote Procedure C...
    dimsky阅读 10,669评论 8 12
  • 2017.5.11良俊打卡: [56/100] 这次活动大家多多少少都有一些收获。 本次活动做得好的地方: 1...
    郑良俊阅读 173评论 0 0