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

Sending different Events via ZeroMQ using Flatbuffer Union

这些天我在 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++-class 中,我想创建新事件并将它们传输到我的 Publisher-class,它通过 ZeroMQ 发送事件。有这样做的好方法或常见方法吗?我在想这样的事情:

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

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

您只需要使用提供的实际构造函数,因此它看起来像:

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

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

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