Как фильтровать в PUB / SUB с двоичными файлами protobuf? - PullRequest
2 голосов
/ 19 марта 2019

Предположим, я хочу сериализовать и передать двоичные файлы protobuf с ZMQ, используя протокол, определенный в cake.proto:

syntax = "proto3";

message Cake {
    int32 radius = 1;
}

Я могу найти множество примеров для шаблона PUB / SUB, где подписчик фильтрует тему со строкой: socket.setsockopt_string(zmq.SUBSCRIBE, "abc")

Но как работает подписка на темы, когда речь идет о двоичных файлах protobuf? Я использую сами байты или ZMQ предоставляет оболочку для сообщения с заголовком, который я могу использовать в таких случаях?

1 Ответ

2 голосов
/ 20 марта 2019

Оболочки для этого нет, тема - это только первый кадр сообщения zeromq.

Если вы уверены, что ваши сообщения protobuf всегда будут начинаться с определенной последовательности байтов (которые составляют вашу тему), тогда да, вы можете просто подписаться на этот шаблон префикса байтов.

Другой вариант - скопировать шаблон субъекта в исходный кадр, а затем добавить кадр (и) protobuf через ZMQ_SNDMORE. Если вы можете упаковать много кадров protobuf в одно и то же сообщение zmq, тогда эффективность будет хорошей. Если каждое сообщение protobuf имеет свою собственную «тему», тогда у вас будет дополнительная служебная информация дополнительного предметного кадра на протобуф.

...