Protocol Buffer和ZeroC-Ice的简单探索

提及数据结构,我想大多数的程序员第一个想起的应该是JSON和XML,然后就没了。其实不然,如果我们想起只是JSON和XML的话,那就说明我们的视野确实太过狭窄。下面我们来一起谈谈那些比JSON和XML相对高级的数据结构。

要谈数据结构,我们首先要了解一个术语:RPC,他的全程是Remote Procedure Call Protocol ,可以翻译为:远程过程调用协议。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

其次我们再来谈Protocol Buffer。它是 Google出品的一种轻量、高效的结构化数据存储格式,性能比 Json、XML 真的强!太!多!具体强多少我们看以下几点:

1、性能方面:

  • 体积小:序列化后,数据大小可缩小至原来的三倍左右;
  • 序列化速度快:比XML和JSON快大约20-100倍;
  • 传输速度快:这个主要是由于数据体积小引起的;

2、使用方面:

  • 使用简单:序列化和反序列化都是有协议自动完成;
  • 维护成本低:多平台只需要一套对象协议文件;
  • 兼容性好:不必破坏旧的数据格式就可以直接对数据格式进行更新;
  • 加密性好:传输过程哪怕是用HTTP,被抓包也只是抓到字节数据;

3、使用范围上:

  跨平台、跨语言、可扩展性好

当然,他也有特定的缺点。比如通用性较差,JSON和XML这两种数据格式都可以几乎是通用的,但是由ProtocolBuffer组织的数据只适合于特定的环境;还有就是自解释性能差,它传输过程中都是序列化后的字节数据,可读性几乎为零,只能通过反序列化后才行。

然后我们再来说ZeroC-Ice。Ice的全称是Internet Communications Engine,翻译为:互联网通信引擎。Ice类似于SOCKET通信技术。Ice 实现各个进程之间的通信用来传输数据,使我们能够以最小的代价构建分布式应用程序。Ice使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。 Ice 是一种面向对象的中间件,为构建面向对象的Client-Sever应用提供了工具、API 和库支持。Ice 应用适合于异构平台环境中使用:客户和服务器可以采用不同的编程语言,可以运行在不同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论部署环境如何,这些应用的源码都是可移植的。 Ice 是 RPC 通信领域里最稳定、强大、高性能、跨平台、多语言支持的老牌开源中间件, 特别适合于当前互联网领域中一个平台存在多种开发语言编程,以及网站和 App 应用并存的复杂大型项目。Ice 实现了语言和平台中立, 高效通信, 通过与具体编程语言无关的中立语言 SlIce (Specification Language For Ice)来描述服务的接口,从而达到对象接口与其实现相分离的目的。

  • Ice 提供了一种 RPC 协议,既可以把 TCP/IP、也可以把 UDP 用作底层传输机制。此外, Ice 还允许你把 SSL 用作传输机制,让客户与服务器间的 所有通信都进行加密。 
  • Ice 协议定义了:一些消息类型,比如请求和答复类型,每种消息类型的头,其中含有像这样的细节:消息类型、消息尺寸、所使用的协议及编码版本 
  • Ice 还支持在线路上进行压缩:通过设置一个配置参数,你可以让所有 的网络通信数据都被压缩,从而节省带宽。如果你的应用要在客户与服务 器间交换大量数据,这种功能会很有用。 
  • Ice 协议适用于构建高效的事件转发机制,因为要想转发消息,你不需 要了解消息内部的详细信息。这意味着,消息交换机不需要对消息进行任 何解编或重整编——它们可以简单地把消息当作不透明的字节缓冲区加以转发 
  • Ice 协议还适用于构建双向操作:如果服务器想要把一条消息发送给客户提供的某个回调对象,这个回调对象可以通过客户原来创建的连接传给服务器。如果客户在防火墙后面,连接只能外出,不能进入,这种特性就特别重要

你可能感兴趣的:(iOS进阶)