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)
        }

你可能感兴趣的:(iOS RPC GRPC使用)