使用 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()
,然后将生成的缓冲区传递给其他函数(再次参见教程)。
这些天我在 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()
,然后将生成的缓冲区传递给其他函数(再次参见教程)。