Подтвердить что ты не робот

Буферы протокола ZeroMQ +

Страница ZeroMQ FAQ предлагает использовать Google protobuf как способ сериализации содержимого сообщения.

Кто-нибудь видит хороший пример использования?

Мне также нужно получить ответ на вопрос "Что является самым большим преимуществом сериализации сообщений?" - может ли это быть чем-то, чем я могу жить без и использовать преимущество более тонкого конвейера.

Мне очень нравится идея файлов .proto и компилятора protoc.

Кроме того, похоже, что еще один отличный инструмент для игры на игровой площадке - libev, любой комментарии приветствуются:)

4b9b3361

Ответ 1

Если вы на 100% уверены, что программы, которые будут общаться через ZMQ, всегда будут способны понимать друг друга в двоичном формате (например, потому что они всегда распределяются вместе и все они скомпилированы с одинаковыми параметрами компилятора) Я не вижу никакой выгоды от накладных расходов, которые добавляются путем сериализации.

Как только указанное условие не может быть выполнено (например, партнерские программы, работающие на разных типах хоста, программы, написанные на разных языках или даже партнерские программы, которые могут развиваться независимо во времени, что может вызвать несовместимость в их исходных двоичных структурах) вполне вероятно, должен.

Похоже, что в настоящее время все и их брат создают сериализационные решения, что может свидетельствовать о том, что ни один из них не подходит для всех решений. Эта страница содержит довольно тщательный бенчмаркинг времени сериализации, времени десериализации и размеров для 27 (!!) различных систем сериализации. Не пропустите первый абзац этой страницы, в нем говорится: "Предупреждение, тесты могут вводить в заблуждение". Ваше приложение, ваши данные - то, что вас заинтересует, но представленные здесь данные могут помочь вам сузить выбор, который вы хотите изучить подробно.

Ответ 2

Вот пример, который отправляет и получает сообщения через java и в С++:

Сериализация в java:

Person person = Person.newBuilder().setName("chand")
    .setEmail("[email protected]").setId(55555).build();
socket.send(person.toByteArray(), 0);

Де-сериализация в java:

byte[] reply = socket.recv(0);
Person person2 = Person.parseFrom(reply);

Сериализация в С++:

Person p = Person();
std::string str;
p.SerializeToString(&str);
int sz = str.length();
zmq::message_t *query = new message_t(sz);
memcpy(query->data (), str.c_str(), sz);
socket->send (*query);

De-serializign в С++

zmq::message_t resultset(100);
socket->recv (&resultset);

Person p = Person();
p.ParseFromArray(resultset.data(), resultset.size());
printf("\n Server : %s", p.name().c_str());

Ответ 3

Я не уверен, что PUB/SUB в 0mq будет работать с protobuf, потому что 0mq ожидает строку в заголовке msg.. но protobuf сначала помещает дескриптор поля.

на самом деле здесь есть ссылка с решением.

http://www.dotkam.com/2011/09/09/zeromq-and-google-protocol-buffers/

веселит