Protobuf и отправка/получение неблокирующих сообщений

Я разрабатываю свой интерфейс передачи сообщений, используя protobuf и неблокирующие библиотеки сокетов libevent. Из-за неблокирующих свойств обратный вызов чтения с помощью libevent может быть вызван в некоторые моменты, когда сообщения не завершены (например, через каждые 4096 полученных байтов). Это означает, что мне нужно написать другую оболочку/заголовок, указывающую размер каждого сообщения, чтобы я мог правильно проанализировать сообщение обратно в объект protobuf. Есть ли лучшие решения для этого? Или protobuf предоставляет API для решения этой ситуации?


person Jes    schedule 15.08.2015    source источник


Ответы (1)


Нет, лучшего решения нет. На самом деле, даже при использовании блокирующего ввода-вывода вам нужно написать заголовок, указывающий размер, потому что Protobuf не являются саморазграничивающими (по умолчанию синтаксический анализатор protobuf всегда будет читать до EOF!).

person Kenton Varda    schedule 16.08.2015
comment
В ПОРЯДКЕ. Я понял. Спасибо! - person Jes; 16.08.2015