Unity3D —— protobuf网络框架

Posted 河乐不为

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D —— protobuf网络框架相关的知识,希望对你有一定的参考价值。

前言:

        protobuf是google的一个开源项目,主要的用途是:

1.数据存储(序列化和反序列化),这个功能类似xml和json等;

2.制作网络通信协议;


一、资源下载:

1.github源码地址:https://github.com/mgravell/protobuf-net

2.google项目源码下载地址(访问需翻墙):https://code.google.com/p/protobuf-net/


二、数据存储:

        C#语言方式的导表和解析过程,在之前的篇章中已经有详细的阐述:Unity —— protobuf 导excel表格数据,建议在看后续的操作之前先看一下这篇文档,因为后面设计到得一些操作与导表中是一致的,而且在理解了导表过程之后,能够快速地理解协议数据序列化反序列化的过程。


三、网络协议:

1.设计思想:

        有两个必要的数据:协议号协议类型,将这两个数据分别存储起来

  • 当客户端向服务器发送数据时,会根据协议类型加上协议号,然后使用protobuf序列化之后再发送给服务器;
  • 当服务器发送数据给客户端时,根据协议号,用protobuf根据协议类型反序列化数据,并调用相应回调方法。

        由于数据在传输过程中,都是以数据流的形式存在的,而进行解析时无法单从protobuf数据中得知使用哪个解析类进行数据反序列化,这就要求我们在传输protobuf数据的同时,携带一个协议号,通过协议号和协议类型(解析类)之间的对应关系来确定进行数据反序列化的解析类。

       

        此处协议号的作用就是用来确定用于解析数据的解析类,所以也可能称之为协议类型名,可以是stringint类型的数据。


2.特点分析:

       使用protobuf作为网络通信的数据载体,具有几个优点:

  • 通过序列化之后数据量比较小
  • 而且以key-value的方式存储数据,这对于消息的版本兼容比较强;
  • 此外,由于protobuf提供的多语言支持,所以使用protobuf作为数据载体定制的网络协议具有很强的跨语言特性