美文网首页
iOS RPC GRPC使用

iOS RPC GRPC使用

作者: 转身是天涯 | 来源:发表于2018-09-04 02:42 被阅读0次

    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使用

          本文链接:https://www.haomeiwen.com/subject/ampwwftx.html