`
yesjavame
  • 浏览: 691958 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Boost Serialization在网游中的应用实例

阅读更多

Boost Serialization在网游中的应用实例

(转载请注明来源于金庆的专栏)

网游中需要在客户端和服务器之间传递多个字符串,
字符串的个数不定, 各个字符串的长度也不定.

对于长度变化不大的字符串, 可以用最大字符串长度:

struct MyCmd : public Cmd
{
WORD wNumber;
BYTE aStrings[MAX_SIZE][0];
};


这样会浪费一点带宽.

如果不这样, 可以用一个长的数据串, 在数据头部指出字符串的长度,
或者直接用'\0'分隔多个字符串, 如:

struct MyCmd : public Cmd
{
DWORD dwDataLen;
BYTE data[0];
};


这样需要拼接和解析处理.

如果用序列化串, 可以很方便的解决该问题.

struct MyCmd : public Cmd
{
DWORD dwStrLen;
BYTE aSerializedStr[0];
};

利用boost::serialization可以序列化任意的std容器.

例如:

#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/vector.hpp>
...
std::vector<std::string> vStrings;
...
ostringstring oss;
boost::archive::text_oarchive oa(oss);
oa & vStrings;
std::string sSerialized = oss.str();

还原时:

std::vector<std::string> vNewStrings;
istringstream iss(sSerialized);
boost::archive::test_iarchive ia(iss);
ia & vNewStrings;


如果是不同的std容器, 只需包含不同的serialization头文件.
如果未包含相应的serialization头文件, 编译会报serialize()函数未定义错误.
如果是自定义的数据结构, 只需定义serialize()即可, 详见boost文档.

序列化串也可应用于数据库保存. 实际上可以保存任意的数据结构.

分享到:
评论

相关推荐

    Boost::Serialization存储C++对象

    通过压缩包中的12个项目,开发者可以学习如何在实践中应用这些知识点,逐步掌握Boost.Serialization的使用,从而提高C++程序的灵活性和可维护性。每个项目可能涵盖不同的主题,如基本序列化、多态对象、模板类序列化...

    C++11 下使用 Boost.Serialization 库实现智能指针的序列化

    在C++编程中,序列化是一个重要的概念,它允许我们将对象的状态转换为可存储或可传输的数据格式,以便稍后能够恢复原始状态。Boost.Serialization库是C++社区广泛使用的序列化工具,它提供了丰富的功能来处理各种...

    C++RPC基于boost.asio、boost.serialization等boost库进行反射.zip

    在实际应用中,这样的RPC框架可以用于分布式系统、微服务架构,或者任何需要跨进程、跨网络调用函数的场景。理解并掌握如何使用Boost库和反射进行RPC开发,对于提升C++程序员在分布式系统开发中的能力具有重要意义。

    boost1.71_MinGW7.3(32/64位动态库、静态库)

    总的来说,"boost1.71_MinGW7.3"是为使用MinGW7.3编译器的C++开发者提供的一套完整的Boost库,包括了适用于该编译器的预编译库文件和必要的头文件,以便他们在开发过程中方便地集成和使用Boost库的各种功能。...

    boost中文手册C++

    Boost库是C++编程语言的一...通过深入学习和应用Boost中文手册中的内容,C++开发者可以充分利用这些工具来提升代码质量,降低项目风险,提高开发效率。无论是开发大型系统还是服务器,Boost库都是一个不可或缺的资源。

    boost-serialization-1.41.0-11.el6_1.2.i686.rpm

    boost-serialization-1.41.0-11.el6_1.2.i686.rpm是centos工具包。

    [Boost C++] Boost C++ 应用开发经典实例 (英文版)

    《Boost C++应用开发经典实例 (英文版)》是一本专为C++开发者设计的实践指南,涵盖了Boost库在实际项目中的应用。Boost是C++社区的一个重要资源库,提供了许多高质量、经过广泛测试的库,可以显著提升C++程序的效率...

    boost-serialization-1.53.0-28.el7.i686 (1).rpm

    离线安装包,测试可用

    boost-serialization-1.53.0-28.el7.x86_64 (1).rpm

    离线安装包,测试可用

    boost库1.68版本windows下编译的dll和lib库

    在本案例中,我们关注的是Boost库的1.68版本,该版本已在Windows环境下使用Visual Studio 2017进行编译,并生成了用于动态链接(dll)和静态链接(lib)的库文件。 首先,我们要理解动态库(dll)和静态库(lib)的...

    boost中文文档

    在Boost中文文档中,我们可以找到详尽的关于这些库的介绍、使用方法以及示例代码。 Boost1.41是Boost库的一个版本,发布于2010年,虽然现在已经有些许过时,但对于学习Boost的基本概念和原理仍然十分有用。华人...

    boost_1.69.0库 VS2017重新编译的库:Release版

    "Debug和DLL库"的提及表明还有其他的Boost库版本可供选择,Debug版通常用于开发阶段,而DLL(动态链接库)版本则允许程序在运行时动态地加载库功能,可以减少应用程序的大小,但需要确保运行环境中存在相应的DLL文件...

    boost-serialization-examples

    在此存储库中,我探索了编程时经常遇到的一些不同的可能情况。 序列化方法 要序列化的每个对象都需要实现serialize方法。 它应该以档案文件作为参数(稍后讨论)。 存档类似于输入/输出数据流。 代替使用运算符&lt...

    基于boost的序列化与反序列化

    让我们深入探讨一下Boost.Serialization的工作原理以及如何在C++中使用它。 首先,序列化是将数据结构或对象转化为字节流的过程,这样就可以保存到文件或者在网络上传输。在Boost.Serialization中,你可以对自定义...

    C++ Boost 库中文文档

    文档通常包含了详细的功能介绍、使用示例和API参考,使得开发者能够快速掌握Boost库的用法,并将其应用到实际项目中。 总之,C++ Boost库是一个强大的工具集,极大地丰富了C++的标准库功能,而中文文档的出现则为...

    boost 1.40.0 中文文档

    在Boost 1.40.0的中文文档中,开发者可以找到详尽的使用指南、示例代码和API参考,帮助他们快速掌握每个组件的用法和设计哲学。这些文档对于初学者和经验丰富的程序员来说都是一份宝贵的资源,能够提升他们在C++项目...

    arm架构下的boost库文件

    本文将详细介绍Boost库在ARM架构下的编译过程以及如何在项目中应用。 首先,让我们了解一下Boost库的主要特点和组件: 1. **多线程支持**:Boost.Thread库提供了线程管理和同步原语,如互斥量、条件变量和future/...

    C++BOOST中文帮助文档.zip

    6. **序列化库**:Boost.Serialization库允许将C++对象的状态保存到文件或内存流中,便于持久化和恢复,支持XML、JSON等多种格式。 7. **数学和随机数**:Boost.Math库提供了超越C++标准库的数学函数,如高精度计算...

    深入实践Boost:Boost程序库开发的94个秘笈

    书中可能通过94个具体的秘笈或实例,逐一解析这些库的用法和技巧,帮助读者深入理解 Boost 库的工作原理,并能灵活地应用到实际项目中。每个秘笈都可能包含实战案例、代码示例和最佳实践,旨在提高读者的编程技巧和...

    boost 中文手册

    9. **Boost.Serialization**:序列化库,可以将对象的状态保存到文件,然后在需要时恢复。 10. **Boost.Python**:提供C++和Python之间的互操作性,方便在C++程序中调用Python模块。 11. **Boost.GIL**:通用图像...

Global site tag (gtag.js) - Google Analytics