SwiftNIO 实战之序列化

序列化一般有两个主要目的:

  • 网络传输
  • 对象持久化

一般评判一个编解码框架的优劣时,会考虑如下几个因素:

  • 是否支持跨语言;
  • 编码后的码流大小;
  • 编解码性能;
  • 类库是否小巧,API 使用是否方便;
  • 使用者需要手工开发的工作量和难度;
  • 类库的开源性以及社区活跃度;

在同等环境下,编码后的字节数越大,存储的时候就越占空间,存储的硬件成本就越高,并且在网络传输时更占带宽,导致系统的吞吐量降低。

主流编解码框架

Google 的 Protobuf

Protobuf(Google Protocol Buffers),由谷歌开源。它将数据结构以 .proto 文件进行描述,通过代码生成工具可以生成对应数据结构的 POJO 对象和 Protobuf 相关的方法和属性。

它的特点:

  • 结构化数据存储格式
  • 高效的编解码性能
  • 语言无关、平台无关、扩展性好
  • 支持的语言比较丰富

对比 XML, 尽管 XML 的可读性和可扩展性非常好,也非常适合描述数据结构,但是 XML 解析的时间开销和 XML 为了可读性而牺牲的空间开销都非常大,因此不适合做高性能的通信协议。Protobuf 使用二进制编码,在空间和性能上具有更大优势。

Facebook 的 Thrift

Thrift 是 Facebook 于2007年开发的跨语言的 rpc 服框架,提供多语言的编译功能,并提供多种服务器工作模式;用户通过 Thrift 的 IDL(接口定义语言)来描述接口函数及数据类型,然后通过 Thrift 的编译环境生成各种语言类型的接口文件,用户可以根据自己的需要采用不同的语言开发客户端代码和服务器端代码。

实战 Protobuf

安装

您将需要 protobuf 的编译器来生成指定语言的代码。

因此需要安装编译器,教程来源:apple/swift-protobuf

$ brew install swift-protobuf
$ protoc --version
libprotoc 3.14.0

.proto

创建 .proto 文件,然后在里面定义消息,再通过 protobuf 编译器生成 Swift代码。

对于 .proto 文件,我们可以用任意的 IDE 或者文本编辑器进行编辑,个人建议用 VSCode 然后结合 vscode-proto3 插件。

Google protocol buffer 的官方文档:文档

我们简单的创建个 movie.proto
这里有一个iOS交流圈:891 488 181 有兴趣的都可以来了解,分享BAT,阿里面试题、面试经验,讨论技术,裙里资料直接下载就行, 大家一起交流学习!

syntax = "proto3";

message Movie {
    enum Genre {
        COMEDY = 0;
        ACTION = 1;
        HORROR = 2;
        ROMANCE = 3;
        DRAMA = 4;
    }

    string title = 1;
    Genre ge
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值