Мы используем boost :: asio и Protobuf для сложных протоколов с низкой скоростью передачи сообщений.Для простых протоколов с высокой скоростью передачи сообщений мы используем boost :: asio и настраиваемую сериализацию.
Библиотека C ++ Protobuf использует std :: string для представления строковых полей для сообщений, которые она десериализует, что означает, что Protobuf выполняет бесплатное распределение хранилища для каждого строкового поля в каждом полученном сообщении.Это делает Protobuf не очень эффективным для действительно высокочастотного обмена сообщениями.Это замечательный инструмент для создания богатых, сложных, платформо-независимых, совместимых с прямой и обратной связью протоколов.
ADDENDUM
Так как кажетсякак люди читают этот ответ, я должен поделиться, что я узнал, что в C ++ Protobuf вы можете повторно использовать объекты сообщений десериализации, чтобы уменьшить частоту malloc при чтении.
См. Советы по оптимизации:
https://developers.google.com/protocol-buffers/docs/cpptutorial