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数据的同时,携带一个协议号,通过协议号和协议类型(解析类)之间的对应关系来确定进行数据反序列化的解析类。
此处协议号的作用就是用来确定用于解析数据的解析类,所以也可能称之为协议类型名,可以是string和int类型的数据。
2.特点分析:
使用protobuf作为网络通信的数据载体,具有几个优点:
- 通过序列化之后数据量比较小;
- 而且以key-value的方式存储数据,这对于消息的版本兼容比较强;
- 此外,由于protobuf提供的多语言支持,所以使用protobuf作为数据载体定制的网络协议具有很强的跨语言特性。
以上是关于Unity3D —— protobuf网络框架的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践