首页 文章 网络游戏消息序列化
消息序列化,主要是指将要发送的数据转换成消息传输的格式,一般这里我们是指转为二进制的数据格式。
这里简单记录一下用过和了解的一些序列化方案:
最早入行记得一直都是没采用特殊的序列化的方式,如果服务端和客户端都是c++还好,直接可以将struct转换进行发送,但是不能包含一些动态数据,反正就是很不友好。
后来也用过手动依次压数据,然后依次取数据,比如pushInt32,getInt32这种成对的方式取。反正是非常原始,从体积,效率以及开发便利性都是非常的低效。
一种非常轻量级的主流数据格式,特别是web中应用非常广泛,易于阅读和编写。但是一般网络游戏TCP长链接用json的比较少,体积和效率都相对较低,
比较消息的过程不是给人看的。但是在游戏开发中,很多地方还是会用到,比如配置表,数据库,以及一些http短连接的地方都可能有它的存在。
google开源的一种序列结构化的数据格式,具有跨语言、跨平台,在体积和编解码方面都非常高效的。也非常实用与游戏这种高实时性的环境,需要定义proto文件
然后用工具生成各种语言的版本,整体来说是
https://github.com/protocolbuffers/protobuf
效率上和protobuf基本接近,不需要些proto文件,各个平台和语言也都支持。如果想用一个简单省事的序列化格式,这会是一个非常好的选择。
自定义的一套序列化格式,最早是参考一款商业引擎中的C++的版本实现的,后来一些其他的项目中也实现了一些lua,js,go等版本。
和protobuf以及msgpack做过一些简单的比较,各有千秋,主要特点是非常的自由,也很好的自由扩展,毕竟是自己写的,用的比较爽。