用msgpack发送一个矢量通过zeromq
Sending a vector through zeromq with msgpack
我似乎无法通过ZeroMQ发送我用msgpack序列化的struct
的vector
。
是该结构体的vector对象:
struct MyData
{
MyData() : id(0), x(0), y(0), a(0) {}
MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
double id;
double x;
double y;
double a;
MSGPACK_DEFINE(id, x, y, a);
};
发送端:
data
为std::vector<MyData>
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function
我构建我的sbuffer
或message_t
错误吗?
接收端:
我不确定我是否应该转换msg.data()
,但我找不到关于如何使用ZeroMQ和messagepack的任何好的文档。
message_t msg;
server_socket->recv(&msg);
msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(msg.data()), msg.size());
msgpack::object obj = unpacked.get();
std::vector<MyData> data;
obj.convert(&data);
printf("size %dn", data.size());
我得到以下错误:
抛出'msgpack::type_error'实例后终止调用
what(): std::bad_cast Aborted
这似乎对我起作用了:
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- Zeromq代理只为每个请求提供了一个答复
- Zeromq socket.RECV()提出了一个stack_overflow异常
- ZeroMQ 中的多个发布者 C++ 这是一个不错的选择吗?
- 每个线程或每个调用一个 ZeroMQ 套接字
- 为什么ZeroMQ req rep在C++和Python之间给我一个空响应
- Zeromq如何制作一个允许它不等待客户端请求的C ++服务器程序
- zeromq管道有多个工人,但有一个水槽,当工人到达呼吸机时,水槽可以处理订单中的工人输出
- 用msgpack发送一个矢量通过zeromq
- 立即从另一个线程中止zeromq-recv()或poll(),而无需等待超时
- 通过ZeroMQ以字符串形式接收对象,然后通过另一个套接字以零拷贝发送对象的正确方法是什么