msgpack c++的使用

2023-10-28


一、MessagePack 是什么

MessagePack 是一种高效的二进制序列化格式。

二、msgpack的使用

#include <vector>
#include <string>
#include <iostream>
#include <msgpack.hpp>

//定义命令
#define COMMAND_GET_INFO 0x01

//自定义请求类
class MyClass {
public:
    std::string m_str;
    std::vector<int> m_vec;
public:
    MSGPACK_DEFINE(m_str, m_vec);
};

int main() {
	//参数初始化
    MyClass my_request;
    my_request.m_str ="Hello MsgPack";
    my_request.m_vec.push_back(100);

    std::tuple<int, MyClass, std::string> send_msg(COMMAND_GET_INFO, my_request, "Addition Data");
	
	//序列化组包
    msgpack::sbuffer sbuf;
    msgpack::pack(sbuf, send_msg);

	//网络传送使用字符串作为消息
    std::string str(sbuf.data());

	//反序列化解包
    msgpack::object_handle oh = msgpack::unpack(str.data(), str.size());
    msgpack::object deserialized_object = oh.get();
	//转换
    std::tuple<int, MyClass, std::string> recv_msg;
    deserialized_object.convert(recv_msg);
    
	//打印
    std::cout << std::get<0>(recv_msg)<< std::endl;
    std::cout << std::get<1>(recv_msg).m_str<< std::endl;
    std::cout << std::get<2>(recv_msg)<< std::endl;
}

三、总结

msgpack序列化可以替代json,实现简单高效的消息传输,接口可以泛化变得通用,但同时消息的可读性变差,相对于如今的网络带宽以及软件变动成本,msgpack的使用意义有待商榷。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

msgpack c++的使用 的相关文章

  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 推导指南中的引用和值之间的差异

    考虑类型A template
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • XML 学习笔记(基础)

    XML文件不区分大小写
  • C# 窗体大小运行时已固定,但是运行和实际Form.CS的不一样

    在属性找到AutoSizeMode 改为GrowAndShrink即可
  • 数据结构与算法之二叉排序树的增加,删除,遍历

    顺序二叉树 子树的左节点小于子树节点 子树的右节点大于子树节点 和子树相同大小的节点可在左也可在右一般不提倡出现相同大小的节点 优点 数组遍历快而插入删除效率不高 链表插入删除效率高 而遍历效率不高 而二叉排序树在遍历和插入删除效率都较高
  • 详解Unicode和JavaScript字符编码

    Unicode Unicode 又称万国码 统一码和国际码 是由统一码联盟制定的一套规范统一的字符编码集 其设计意图是将世界上所有字符都包含在其中 它使用特定的十六进制编号来表示字符 每一个特定十六进制编号统称为码点 也叫码位 用 U 紧接
  • java数组基础详解

    目录 java数组基础详解 一 引言 二 声明数组 三 初始化数组 3 1 静态初始化 3 2 动态初始化 四 访问数组元素 五 遍历数组 六 分析数组内存 七 数组常见异常 7 1 索引越界异常ArrayIndexOutOfBoundsE
  • 题10:神奇的回文串

    回文串 acbca 1212 package 字符串问题 public class case10 神奇的回文串 public static void main String args boolean res isPalindrome abc
  • Philcoin如何提高在宗教方面和当地社区的影响力

    Philcoin如何提高在宗教方面和当地社区的影响力 Philcoin的规模正在快速增长 在短短几周内 社区成员已经超过了10万 并且还在呈指数增长 Philcoin的宗旨是将慈善带到偏远的地方 这具有很大的挑战性 我们知道需要更多伙伴加入
  • 2023.9.8 基于传输层协议 UDP 和 TCP 编写网络通信程序

    目录 UDP 基于 UDP 编写网络通信程序 服务器代码 客户端代码 TCP 基于 TCP 编写网络通信程序 服务器代码 客户端代码 IDEA 打开 支持多客户端模式 UDP 特点 无连接性 发送端和接收端不需要建立连接也可相互通信 且每个
  • 聊聊火出圈的ChatGPT

    前言 OpenAI 近期发布聊天机器人模型 ChatGPT 迅速火爆各大技术网站 就像一个突然激起的巨浪打破了沉寂已久的水面 它的出现无论是对人工智能的资本圈还是技术圈都感受到了春风回暖 前兔似锦的未来 尤记得2015年谷歌开源的Tenso
  • 机器人编程需要c语言吗,机器人编程和计算机编程有什么不一样

    原标题 机器人编程和计算机编程有什么不一样 格物斯坦小坦克就大家关心的机器人编程教育和计算机编程教育做一个对比 这样帮助大家更好地了解二者的共同性和区别 机器人编程的目的是让学生学会组装 搭建和编写程序运行机器人 课程的内容由硬件知识和编程
  • python中super的作用_Python代码中super()函数具有哪些功能呢?

    摘要 下文讲述Python代码中super 函数的功能说明 如下所示 super函数简介 super 函数是Python中的一个内置函数 用来处理多重继承问题中直接用类名调用父类方法 在使用单继承的时候没问题 当使用多继承 会涉及到查找顺序
  • 小米4A刷入breed教程

    已迁移到新的博客 新链接 飞young使用路由器教程 ndsx的博客 CSDN博客https blog csdn net qq 58617843 article details 127381367 csdn share tail 7B 22
  • Go 语言面试题(一):基础语法

    文章目录 Q1 和 的区别 Q2 指针的作用 Q3 Go 允许多个返回值吗 Q4 Go 有异常类型吗 Q5 什么是协程 Goroutine Q6 如何高效地拼接字符串 Q7 什么是 rune 类型 Q8 如何判断 map 中是否包含某个 k
  • Oracle中的序列(Sequence)

    1 什么是序列 序列 SEQUENCE 是序列号生成器 可以为表中的行自动生成序列号 产生一组等间隔的数值 类型为数字 不占用磁盘空间 占用内存 其主要用途是生成表的主键值 可以在插入语句中引用 也可以通过查询检查当前值 或使序列增至下一个
  • 入坑nodemcu,从刷固件到点亮LED,读完这篇文章就够了

    今天进手了一块nodemcu 准备入坑 有兴趣的朋友们 跟着小智手机手学习如何刷Lua固件且运行第一个亮灯实例吧 nodemcu NodeMCU 是一个开源的物联网平台 它包含了可以运行在esp8266 Wi FiSoC芯片之上的固件 以及
  • 一个C#操作Excel类,功能比较全

    using System using System Data using System Configuration using System Web using Microsoft Office Interop using Microsof
  • 【STM32】系统时钟RCC详解(超详细,超全面)

    RCC Reset and Clock Control 复位和时钟控制 在绝大部分MCU芯片中都包含复位和时钟控制模块 也是MCU重要的组成部分 相比于以前51单片机 现在STM32内部集成的时钟模块功能更加丰富 包含时钟选择 倍频 输出
  • Vue.js基础知识解析:Vue绑定

    文章目录 Vue绑定 类绑定 对象语法 数组语法 样式绑定 对象语法 数组语法 常见绑定 文本绑定 属性绑定 事件绑定 Vue绑定 Vue js 是一种流行的前端 JavaScript 框架 用于构建交互式的用户界面 在 Vue 中 有多种
  • 微信小程序.日期组件

    缘起 微信小程序官方提供的picker样式不好控制 跟其他样式不统一 也没法进行其他操作 不如自定义一个 使用 picker view封装为一个组件 代码现成 直接复制过去用吧 效果 组件代码 haiweidate wxml
  • msgpack c++的使用

    msgpack C 的使用 一 MessagePack 是什么 二 msgpack的使用 三 总结 一 MessagePack 是什么 MessagePack 是一种高效的二进制序列化格式 二 msgpack的使用 include