iOS RPC GRPC使用

RPC

远程过程调用 可以区别于IPC

A想要调用B服务器上的提供的函数/方法

单一 RPC 无法实现 push,即推送服务。

理由是,RPC 是client 调用 server获取数据,是一个完整的过程,实现不了server调用client。

解决方案:让client 既可以调用server上的RPC服务,反之client本身也成为一个RPC服务让Server来调用。

在RPC中,所有的函数都必须有自己的一个ID。这个ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,必须附上这个ID。然后我们还需要在客户端和服务端分别维护一个 {函数 <--> Call ID} 的对应表。两者的表不一定需要完全相同,但相同的函数对应的Call ID必须相同。当客户端需要进行远程调用时,它就查一下这个表,找出相应的Call ID,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。

在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。甚至有时候客户端和服务端使用的都不是同一种语言(比如服务端用C++,客户端用Java或者Python)。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程。

GRPC

github地址:https://github.com/grpc/

gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。不过,当前gRPC仅支持 Protobuf ,且不支持在浏览器中使用。

Swift 使用 GRPC

podfile,注意swift要加use_frameworks!


# Uncomment this line if you're using Swift

use_frameworks!

platform :ios, '9.0'

target 'GRPC proto' do

pod 'SwiftGRPC'

end

BoringSSL需要给终端挂代理才行

还要安装swift-protobuf(用来将proto文件解析为.swift文件)

地址:https://github.com/apple/swift-protobuf

建议使用homebrew安装

$ brew install swift-protobuf

安装后把protoc-gen-swift和protoc-gen-swiftgrpc两个文件放到PATH里

就可以直接$ protoc --swift_out=. my.proto 这样只使用了protoc-gen-swift生成了一个pb.swift文件
使用protoc --swift_out=. --swiftgrpc_out=Client=true,Server=false:. xxx.proto 这样还会多生成一个grpc.swift

然后把这两个文件引入到项目文件夹中

然后获取service 一般是ServiceClient结尾,然后创建请求,一般是Request结尾,然后service.XX(request)并获取结果

let _ = try! service.sayHello ( request ) {  reply,result in
            if let reply = reply {
                print("RESPONSE: \(reply)")
            }
            print(result)
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自:http://blog.csdn.net/kesonyk/article/details/50924489 ...
    晴天哥_王志阅读 25,346评论 2 38
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,665评论 19 139
  • Android消息机制探究 Looper Handler 之间有什么关系: 首先看一个handler的使用例子: ...
    埃赛尔阅读 580评论 2 2
  • 第一场雪 梨花满天飞似雪, 一时掩尽天下春。 第二场雪 此景更为吉祥兆, 至冬天公送瑞雪。 ——2007年于洛阳 ...
    明灯医学阅读 174评论 0 0
  • 所有QQ可用@该QQ代替 所有指令自定义,多条指令用|间隔,如踢人指令:T|踢|去死 以下为全局管理可用指令: 启...
    老王_e31a阅读 222评论 0 0

友情链接更多精彩内容