编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.UIKit框架学习
  • 02.UIViewController
  • 03.iOS工程面板说明
  • 04.基础控件Swift版
  • 05.手势的处理逻辑
  • 06.通信设计和实践
  • 07.Swift数据的存储
  • 09.Swift版网络请求
  • 10.Swift版数据存储
  • 11.Swift版多媒体实践
  • 12.Swift与ObjC互调
  • 13.Swift多线程开发
  • 14.Swift版SnapKit布局
  • 16.开发SDK实践
  • 17.iOS项目经验积累
  • 18.Swift版grpc请求

18.Swift版grpc请求

目录介绍

  • 01.Swift版grpc项目
    • 1.1 RPC简单介绍
    • 1.2 gRPC简单介绍
  • 02.gRPC-Swift准备步骤
    • 2.1 安装Protocol编译器
    • 2.2 引入gRPC-Swift
    • 2.3 创建.porto文件编译
    • 2.4 生成文件说明
  • 03.gRPC-Swift调用步骤
    • 3.1 调用gRPC服务
    • 3.2 如何调试gRPC服务
    • 3.3 设置ip或域名

01.Swift版grpc项目

1.1 RPC简单介绍

简单来说,HTTP+REST方式,聚焦在数据data上:发送一个请求request,然后返回数据response。

而RPC,聚焦在「方法」上——直接调用一个「方法/函数/command」——只是对比于在同一个软件内部调用方法,RPC中调用有点不太一样,它是从电脑A,直接调用电脑B中的某个「方法」,是一个远程调用(Remote Call)。

然后这个「方法」和我们常见的「方法」一样,会有参数、返回值。要传输的数据,就放在参数、返回值里面,最终实现数据的传输。

1.2 gRPC简单介绍

gRPC是Google主导的对RPC的具体实现。卖点:高性能、开源、通用(支持很多语言: Supported languages)。

其中,Protocol Buffers,有需要认识一下的。可以把它类比成XML、JSON,但是Protocol Buffers的数据包更小、速度更快、实现更简单。

02.gRPC-Swift准备步骤

2.1 安装Protocol编译器

需要安装Protocol Buffers(protobuf)编译器,通常称为protoc。可以通过访问Google Protobuf GitHub下载适合你操作系统的版本。

如果没有安装这个插件而运行生成代码的指令,报错command not found: protoc

brew install protobuf
brew install grpc

# 注意需要用这个,这个是针对swift的
brew install swift-protobuf grpc-swift

2.2 引入gRPC-Swift

如下所示:

# grpc库:https://github.com/grpc/grpc-swift
pod 'gRPC-Swift', '~> 1.0'
# 依赖Protobuf插件
pod 'Protobuf', '~> 3.0'

然后运行: pod install

可能还需要添加use_frameworks!到您的Podfile。

2.3 创建.porto文件编译

创建一个.proto文件,例如 helloworld.proto

syntax = "proto3";
 
package example;
 
service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
    string name = 1;
}
 
message HelloReply {
    string message = 1;
}

在终端中,使用 Protocol Buffers 的编译器 protoc 将 .proto 文件编译为 Swift 代码。确保你已经安装了 Protocol Buffers 的编译器。

#首先测试protoc是否OK
$ protoc --version
#显示了版本则说明正常
libprotoc 29.1

# 具体可以参考:https://www.jianshu.com/p/d487dc2e3bb8
protoc --swift_out=. --grpc-swift_out=. helloworld.proto

这将会生成两个文件:Server.pb.swift 和 Server.grpc.swift,包含了必要的类和方法以便在 Swift 中使用。

2.4 生成文件说明

可以看到,两个文件(命名还有点奇怪):

$ protoc --swift_out=. --grpc-swift_out=. helloworld.proto
$ pwd
/Users/yc/github/WxiOSPalmDa/iOSPalmDa/WxiOSPalmDa/Protos
$ ls
helloworld.grpc.swift	helloworld.pb.swift	helloworld.proto
  • .grpc.swift文件生成的是:API接口方法(对应上面的SayHello方法)、Client(App端用到)、Provider(实现后台时用到——后台工程师用)
  • .pb.swift文件生成的是:模型类(对应上面的HelloRequest ,HelloReply)

03.gRPC-Swift调用步骤

3.1 调用gRPC服务

3.2 如何调试gRPC服务

3.3 设置ip或域名

参考博客

项目:https://github.com/grpc/grpc-swift

grpc-swift入门:https://www.jianshu.com/p/d487dc2e3bb8

ios 接入GRPC 原创:https://blog.51cto.com/u_16213339/11933455

贡献者: yangchong211
上一篇
17.iOS项目经验积累