序列化方法以及基于序列化的网络通信方法_2

文档序号:9810485阅读:来源:国知局
:利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体;
[0036]进一步地,为了将协议或类型在C++网络端与Lua网络端之间进行无缝通信,还可以执行下述第四步骤S4和第五步骤S5。
[0037]第四步骤S4:导出针对Lua的类而定义的针对公共访问权限的函数;
[0038]具体地,例如,在需要导出给Lua的类定义公共访问权限的方法(如果需要可以定义一个通用的通信函数,参数类型为基类),运行生成Lua绑定的python文件后会自动生成与Lua的通信代码,然后就可以依靠导出的函数在Lua与C++之间自由传递序列化结构体了。
[0039]第五步骤S5:利用导出的函数在Lua网络端与C++网络端之间传递序列化的结构体。
[0040]进一步地,为了实现通过更新配置文件的方式更新协议,还可以执行下述第六步骤S6。
[0041]第六步骤S6:修改协议定义,然后在注册协议处修改默认参数,通过运行客户端来自动更新配置文件,将更新的配置文件放入协议的更新版本。
[0042]这样,就可以在Lua中使用新协议了,而此时并不需要更新C++编译的.so文件,原有.so文件中的协议定义依旧可以正常转发。可以通过Python生成C++的调用代码(python代码的作用是分析定义头文件,自动把C++里的类型和其它需要导出到Lua里的C++函数注册到Lua虚拟机里),此后不需要为每种序列化类型手工写或者使用生成器注册类型给Lua即可以与Lua互相传递所有序列化结构的机制。在不能更新C++代码时可以通过自动生成配置文件的方式实现新增或更改协议定义并且可以实现与原.so中定义与逻辑并存且互不影响的机制。
[0043]由此,在本发明中,客户端和服务端直接定义结构体,并在结构体中标明哪些字段是需要序列化,即可以直接进行通信并无缝与Lua脚本进行交互。在不能更新C++代码的情况下通过更改配置文件实现更改Lua协议定义和增加新协议。
[0044]在本发明中,C++采用模板SFINAE特性实现类型系统,可在编译期自动识别类型定义并合并处理相邻的字段,极大的提高了性能;支持结构体的继承和多态,支持协议和标准模板库(STL,Standard Template Library)容器的无限嵌套。采用本发明的方案,通过配置文件修改Lua协议时不影响原C++协议已有的逻辑。而且,Delphi端通过预先保存反射信息?是I^f生會K O
[0045]此外,在具体示例中,可以使用在序列化头Sign字段的二进制比特(bit)位进行标记的方式实现动态包头结构,从而使在大量小包时需要保证每个包的体积尽可能小和特殊情况需要超大包的需求都得到满足。
[0046]在手游不方便更新二进制代码的情况下,本发明能通过更新配置文件的方式修改或新增协议供Lua文件使用,相比其它解决方案能更灵活的适应手机环境的版本更新模式。
[0047]在本发明中,遍历序列化字段的方式包括:序列化/反序列模块在编译期使用模板SFINAE特性生成类型加载器系统并在运行期不需要多次跳转判断即可直接对字段进行序列化/反序列化的特征,免除了在运行期通过多个“if else”语句或者hash表的方式对不同类型字段进行处理导致的性能开销。
[0048]此外,需要说明的是,除非特别说明或者指出,否则说明书中的术语“第一”、“第二”、“第三”等描述仅仅用于区分说明书中的各个组件、元素、步骤等,而不是用于表示各个组件、元素、步骤之间的逻辑关系或者顺序关系等。
[0049]可以理解的是,虽然本发明已以较佳实施例披露如上,然而上述实施例并非用以限定本发明。对于任何熟悉本领域的技术人员而言,在不脱离本发明技术方案范围情况下,都可利用上述揭示的技术内容对本发明技术方案作出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本发明技术方案保护的范围内。
【主权项】
1.一种序列化方法,其特征在于包括: 第一步骤:按照结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段; 第二步骤:将定义的类型系统与特定的协议号绑定; 第三步骤:利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体。2.根据权利要求1所述的,其特征在于,指明需要序列化的字段的步骤包括:将需要序列化的协议及协议字段信息抽象成对应类型系统的实例。3.根据权利要求1所述的,其特征在于,指明需要序列化的字段的步骤包括:将特定宏包含在结构体定义内。4.一种基于序列化的网络通信方法,其特征在于包括: 第一步骤:按照常规结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段; 第二步骤:将定义的类型系统与特定的协议号绑定; 第三步骤:利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体; 第四步骤:导出针对Lua的类而定义的针对公共访问权限的函数; 第五步骤:利用导出的函数在Lua网络端与C++网络端之间传递序列化的结构体。5.根据权利要求4所述的,其特征在于还包括: 第六步骤:修改协议定义,然后在注册协议处修改默认参数,通过运行客户端来自动更新配置文件,将更新的配置文件放入协议的更新版本。6.根据权利要求4或5所述的,其特征在于,指明需要序列化的字段的步骤包括:将需要序列化的协议及协议字段信息抽象成对应类型系统的实例。7.根据权利要求4或5所述的,其特征在于,指明需要序列化的字段的步骤包括:将特定宏包含在结构体定义内。
【专利摘要】本发明提供了一种序列化方法以及基于序列化的网络通信方法。按照常规结构体定义的方式,将协议的定义抽象成类型系统,并且指明需要序列化的字段;将定义的类型系统与特定的协议号绑定;利用C++模板系统的SFINAE特性实现对协议字段和嵌套协议的自动序列化处理以生成序列化的结构体。而且,导出针对Lua的类而定义的针对公共访问权限的函数;并且利用导出的函数在Lua网络端与C++网络端之间传递序列化的结构体。
【IPC分类】G06F13/42
【公开号】CN105573956
【申请号】CN201510916783
【发明人】王进, 谢斌
【申请人】盛趣信息技术(上海)有限公司
【公开日】2016年5月11日
【申请日】2015年12月10日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1