c++ - 使用 Flatbuffer Union 通过 ZeroMQ 发送不同的事件

标签 c++ zeromq unions flatbuffers

我想使用 flatbuffer 通过 TCP(使用 ZeroMQ)发送包含不同数据的事件。因此,我使用的是 Union

// event.fbs
namespace event;

table ByteArray {
    bytes:[byte];
}

table OtherData {
    id:uint;
    value:uint;
}

union EventData {
    ByteArray,
    OtherData,
    String:string
}

table Event {
  name:string (key);
  timestamp:ulong = -1;
  data:EventData;
}

root_type Event;

在我的 C++ 类中,我想创建新事件并将它们传输到我的 Publisher 类,该类通过 ZeroMQ 发送事件。有这样做的好方法或常见方法吗?我在想这样的事情:

mPublisher.publishEvent(event::Event("event1", 0, "dataString"));
mPublisher.publishEvent(event::Event("event2", 1, byteArray));

上面的例子是行不通的,因为没有这样的构造函数。有没有一种用不同数据创建多个事件的好方法?我应该如何将这些 flatbuffer 事件传递给另一个类,比如我的发布者?我应该传递 flatbuffer 还是 event-offset?

最佳答案

你只需要使用提供的实际构造函数,所以它看起来像:

event::CreateEvent(fbb, "event1", 0, fbb.CreateString("dataString"));

还有一个event::CreateByteArray等。查看生成的代码,或者教程。

event::CreateEvent 将偏移量返回到未完成的 FlatBuffer 中,因此通常不适合传递给非 FlatBuffer 函数。您需要在该偏移量上调用 fbb.Finish(),然后将生成的缓冲区传递给其他函数(再次参见教程)。

关于c++ - 使用 Flatbuffer Union 通过 ZeroMQ 发送不同的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410801/

相关文章:

c++ - 运算符重载 << 错误

python - 带有 zeroMQ 的 Nuitka

c++ - 使用 gcc 写入 Unions

c - 在这个例子中我需要考虑字节顺序吗?

c++ - 由于某种原因,这永远不会退出 for 循环以打印出最终值

c++ - 当我想为一个结构声明新成员时,有些麻烦我不明白

tcp - ZeroMQ 客户端失去连接

c++ - 使用 libsodium、randombytes 错误为 iOS 构建 zeromq

c - union 与 void 指针

c++ - 如何从 netscape cookies.txt 文件导入 cookie 并使用它们?