Я разрабатываю свой интерфейс передачи сообщений, используя protobuf
и неблокирующие библиотеки сокетов libevent
. Из-за неблокирующих свойств обратный вызов чтения с помощью libevent
может быть вызван в некоторые моменты, когда сообщения не завершены (например, через каждые 4096 полученных байтов). Это означает, что мне нужно написать другую оболочку/заголовок, указывающую размер каждого сообщения, чтобы я мог правильно проанализировать сообщение обратно в объект protobuf
. Есть ли лучшие решения для этого? Или protobuf
предоставляет API для решения этой ситуации?
Protobuf и отправка/получение неблокирующих сообщений
Ответы (1)
Нет, лучшего решения нет. На самом деле, даже при использовании блокирующего ввода-вывода вам нужно написать заголовок, указывающий размер, потому что Protobuf не являются саморазграничивающими (по умолчанию синтаксический анализатор protobuf всегда будет читать до EOF!).
person
Kenton Varda
schedule
16.08.2015
В ПОРЯДКЕ. Я понял. Спасибо!
- person Jes; 16.08.2015