如何使用protobuf二进制文件在PUB / SUB中进行过滤?

时间:2019-03-18 21:32:38

标签: protocol-buffers zeromq publish-subscribe

假设我想使用cake.proto中定义的协议与ZMQ序列化并传输protobuf二进制文件:

syntax = "proto3";

message Cake {
    int32 radius = 1;
}

我可以找到许多关于PUB / SUB模式的示例,其中订阅者使用字符串过滤主题: socket.setsockopt_string(zmq.SUBSCRIBE, "abc")

但是当涉及到protobuf二进制文件时,订阅主题如何工作?我是使用字节本身还是ZMQ为带有标题的消息提供包装器?在这种情况下可以使用该报头?

1 个答案:

答案 0 :(得分:2)

没有包装器,主题只是zeromq消息的第一帧。

如果您确信您的protobuf消息将始终以特定的字节序列(构成主题)开头,那么可以,您可以订阅该字节前缀模式。

另一个选择是将主题图案复制到初始帧中,然后通过ZMQ_SNDMORE添加protobuf帧。如果您可以将许多protobuf帧打包到同一zmq消息中,则效率很高。如果每个protobuf消息都有其自己的“主题”,那么每个probubuf都会有一个额外的主题框架的开销。