[發明專利]序列化方法以及基于序列化的網絡通信方法有效
| 申請號: | 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.szxzyx.cn/pat/books/201510916783.2/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:綜合核心處理機系統分布式多處理器識別方法
- 下一篇:一種引導備份器





