基于CS架构对protobuf网络协议的封装方法以及电子设备与流程
本发明属于protobuf网络协议,具体涉及一种基于cs架构对protobuf网络协议的封装方法。
背景技术:
1、protobuf是一种游戏领域常用的通信协议。但是不论谷歌官方的protobuf库还是第三方的protobuf.net库,都存在一定的性能问题。网络游戏的客户端对性能比较敏感,长时间运行未改良的protobuf库会引发设备发热、耗电增加、帧率下降等问题。同时服务器在实现加载、同步、标脏逻辑的时候,也需要对数据进行方法和属性的扩展。
技术实现思路
1、鉴于以上存在的问题,本发明提供一种基于cs架构对protobuf网络协议的封装方法以及电子设备,用于实现高性能通信、自动化内存对象管理、数据自动化持久化与同步,降低开发复杂度,提升系统运行效率与开发效率。
2、为解决上述技术问题,本发明采用如下的技术方案:
3、本发明第一方面提供一种基于cs架构对protobuf网络协议的封装方法,应用于包括服务器和客户端的cs架构系统,包括:
4、s10,在代码生成阶段,对客户端协议代码执行如下操作:
5、s101,设置禁止编译的编译符号,以阻止应用层代码被编译;
6、s102,针对每个protobuf协议类,自动生成递归的创建方法和回收方法,所述递归方法遍历协议类内部嵌套的成员协议,协议类包括泛型容器和数组成员,在创建时自动触发成员协议的创建,在回收时自动触发成员协议的回收;
7、s103,将所述创建方法和回收方法成对注册到对象工厂中,为每个协议类型构建专属对象池,并将所有生成的工厂类导出为动态库,同时生成登记该动态库的链接描述文件;
8、s104,为每个协议类自动生成一个读取接口,以及一个处理接口方法,所述处理接口方法的形参即为该协议类,且参数类型被设为传入类型,用于规范协议处理动作;
9、s105,自动生成一个协议处理类,所述协议处理类用于:对接收的数据包进行解密和解压;登记生成的各个所述读取接口,并按协议编号组织成协议到处理方法的字典表;从数据包中读取协议编号,从对象池中获取对应协议实例,从数据包中读出协议数据,根据字典表调用相应的处理接口,处理完毕后将协议实例回收到对象池;实现异步等待类,用于在异步发送协议后挂起等待,并在协议实例回收到对象池全部完成后唤醒等待;
10、s106,为每个协议类自动生成对应的持久类,包括:将协议类的各成员逐一复制到持久类中,并生成拷贝代码,实现对初始数据的全量更新;为持久类生成部分更新函数,以成员名为键值,生成对应成员类型的处理函数,所述处理函数将传入的字节流解析成所需类型并为该成员赋新值,实现对数据的增量更新;
11、s107,去除设置的禁止编译符号;
12、s20,在代码生成阶段,对服务器协议代码执行如下操作:
13、s201,生成与数据库表对应的接口方法,包括支持sql数据库的基本crud接口以及表名映射接口;
14、s202,生成支持差量更新的接口方法和支持标脏数据追踪的接口方法,并在初始化时通过统一设置接口使数据支持差量更新,系统自动收集已修改的数据进行持久化并向客户端同步;
15、s203,生成支持按字段写入redis的接口方法,使单个字段在写入redis时采用与写入数据库相同的数据编码;
16、s204,为每个协议分配唯一的协议编号;
17、s205,利用生成的统一协议接口,实现服务器与服务器之间、服务器与客户端之间的数据同步逻辑,所述同步逻辑包括全量同步和差量同步。
18、优选地,s203中包括:在 protobuf 定义文件中识别自定义的数据表标识和数据字段标识;对带有数据表标识的消息,自动生成用于redis/mysql全量持久化的接口方法;对带有数据字段标识的字段,自动生成用于redis/mysql单字段持久化的接口方法。
19、优选地,s205中所述全量同步的实现包括:当数据表被标记为脏数据时,调用全量序列化方法打包完整协议数据;接收端通过全量标记触发全量反序列化,完成同步。
20、优选地,s205中所述差量同步的实现包括:当表的字段被标记为脏数据时,调用单字段序列化方法仅打包该字段数据;接收端通过差量标记触发单字段反序列化,完成增量更新。
21、本发明第二方面提供一种电子终端,所述电子终端包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述至少一条程序代码由所述一个或多个处理器加载并执行以实现如上任一项所述的基于cs架构对protobuf网络协议的封装方法所执行的操作。
22、本发明第三方面提供一种存储介质,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现如上任一项所述的基于cs架构对protobuf网络协议的封装方法方法所执行的操作。
23、采用本发明具有如下的有益效果:
24、(1)高性能通信:通过协议号-类型映射,通信时无需传输全量类型描述,冗余数据减少60%以上,解析效率提升40%以上,适配高并发网络场景;
25、(2)低风险内存管理:递归式对象池+生命周期托管,彻底解决嵌套内存手动管理的复杂度,避免内存泄漏,内存复用率提升70%以上;
26、(3)高效开发提效:自动化生成持久化、同步代码,开发者仅需关注业务逻辑,开发周期缩短50%以上;
27、(4)框架无缝兼容:改造后代码可直接适配c/s框架,无需额外适配工作,保障系统一致性与可维护性。
1.一种基于cs架构对protobuf网络协议的封装方法,其特征在于,应用于包括服务器和客户端的cs架构系统,包括:
2.如权利要求1所述的基于cs架构对protobuf网络协议的封装方法,其特征在于,s203中包括:在 protobuf 定义文件中识别自定义的数据表标识和数据字段标识;对带有数据表标识的消息,自动生成用于redis/mysql全量持久化的接口方法;对带有数据字段标识的字段,自动生成用于redis/mysql单字段持久化的接口方法。
3.如权利要求1所述的基于cs架构对protobuf网络协议的封装方法,其特征在于,s205中所述全量同步的实现包括:当数据表被标记为脏数据时,调用全量序列化方法打包完整协议数据;接收端通过全量标记触发全量反序列化,完成同步。
4.如权利要求1所述的基于cs架构对protobuf网络协议的封装方法,其特征在于,s205中所述差量同步的实现包括:当表的字段被标记为脏数据时,调用单字段序列化方法仅打包该字段数据;接收端通过差量标记触发单字段反序列化,完成增量更新。
5.一种电子终端,其特征在于,所述电子终端包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条程序代码,所述至少一条程序代码由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求4任一项所述的基于cs架构对protobuf网络协议的封装方法所执行的操作。
6.一种存储介质,其特征在于,所述存储介质中存储有至少一条程序代码,所述至少一条程序代码由处理器加载并执行以实现如权利要求1至权利要求4任一项所述的基于cs架构对protobuf网络协议的封装方法方法所执行的操作。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com