[发明专利]序列化方法以及基于序列化的网络通信方法有效
申请号: | 201510916783.2 | 申请日: | 2015-12-10 |
公开(公告)号: | CN105573956B | 公开(公告)日: | 2019-06-21 |
发明(设计)人: | 王进;谢斌 | 申请(专利权)人: | 盛趣信息技术(上海)有限公司 |
主分类号: | G06F13/42 | 分类号: | G06F13/42 |
代理公司: | 上海金盛协力知识产权代理有限公司 31242 | 代理人: | 郑鸣捷 |
地址: | 201203 上海市浦东*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 序列 方法 以及 基于 网络 通信 | ||
本发明提供了一种序列化方法以及基于序列化的网络通信方法。按照常规结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段;将定义的类型系统与特定的协议号绑定;利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体。而且,导出针对Lua的类而定义的针对公共访问权限的函数;并且利用导出的函数在Lua网络端与C++网络端之间传递序列化的结构体。
技术领域
本发明涉及网络技术领域,更具体地说,本发明涉及一种序列化方法以及基于序列化的网络通信方法。
背景技术
目前可选的一些网络传输方案,大致有传统的直接传输结构体内存和基于序列化的两种方案。
第一种方案的实现方式是将内存里的数据直接通过网络发送到对方,它的优点是不需要结构解析因此可以节约双方的CPU使用量,但是由于pod类型的数据都是定长数据,因此在发送列表或字典数据难以实现或极不灵活,发送字符串数据大部分采用直接设定一个最长字符串的方式传输,大多数情况都存在浪费内存的情况,传输较大字符串时浪费情况尤其明显。在客户端与服务器版本不一致需要扩展字段时不太容易实现,也无法实现对垃圾数据和恶意数据的字段级校验。
第二种方案大部分最著名的是协议缓冲(protocol buffer),它是通过定义一个类型定义文件,然后生成各语言的代码的方式来实现序列化,它解决了第一种方案的诸多弊端,可以对可变长度数据进行有效的传输。但是它也有几个问题,第一是它不支持delphi,所以对于使用delphi做服务端的游戏无法使用;第二是它序列化后的数据量还是比较大,对于网络交互频繁的大型MMO(Massively Multiplayer Online)游戏来说对服务器的带宽要求比较高;第三是它不能实现在不更新代码的情况热更新协议。
发明内容
本发明所要解决的技术问题是针对现有技术中存在上述缺陷,提供一种能够提高运行时性能并且能够更容易实现遇到垃圾或恶意数据时的快速失败机制的
为了实现上述技术目的,根据本发明,提供了一种序列化方法,包括:
第一步骤:按照常规结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段;
第二步骤:将定义的类型系统与特定的协议号绑定;
第三步骤:利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体。
优选地,指明需要序列化的字段的步骤包括:将需要序列化的协议及协议字段信息抽象成对应类型系统的实例。
优选地,指明需要序列化的字段的步骤包括:将特定宏包含在结构体定义内。
而且,为了实现上述技术目的,根据本发明,还提供了一种基于序列化的网络通信方法,包括:
第一步骤:按照常规结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段;
第二步骤:将定义的类型系统与特定的协议号绑定;
第三步骤:利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体;
第四步骤:导出针对Lua的类而定义的针对公共访问权限的函数;
第五步骤:利用导出的函数在Lua网络端与C++网络端之间传递序列化的结构体;
第六步骤:修改协议定义,然后在注册协议处修改默认参数,通过运行客户端来自动更新配置文件,将更新的配置文件放入协议的更新版本。
优选地,指明需要序列化的字段的步骤包括:将需要序列化的协议及协议字段信息抽象成对应类型系统的实例。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于盛趣信息技术(上海)有限公司,未经盛趣信息技术(上海)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510916783.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:综合核心处理机系统分布式多处理器识别方法
- 下一篇:一种引导备份器