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

How to filter in PUB/SUB with protobuf binaries?

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

syntax = "proto3";

message Cake {
    int32 radius = 1;
}

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

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

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

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

另一种选择是将主题模式复制到初始帧中,然后通过 ZMQ_SNDMORE 添加 protobuf 帧。如果您可以将许多 protobuf 帧打包到同一条 zmq 消息中,那么效率会很好。如果每个 protobuf 消息都有自己的 "subject" 那么每个 protobuf 都会有一个额外的主题框架的开销。