Я столкнулся с некоторыми проблемами при обмене данными между процессами с использованием protobuf. Protobuf допускает набор форматов сериализации:
SerializeToArray(void * data, int size) : bool
SerializeToCodedStream(google::protobuf::io::CodeOutputStream * output) : bool
SerializeToFileDescriptor(int file_descriptor) : bool
SerializeToOstream(ostream * output)
Моя проблема в том, что я понятия не имею, как использовать его с сокетами boost asio, которые я использую, поскольку я реализовал их для отправки строк:
boost::asio::write(socket, boost::asio::buffer(message),
boost::asio::transfer_all(), ignored_error);
Но я хотел бы отправить ostream.
ostringstream
, сериализовать его с помощью protobuf, преобразовать его строковое значение.str()
в буст-буфер и отправить его. Вы не планируете использовать семантику полного потока при автоматическом обмене сообщениями сокетов, не так ли? - person Jonas Bötel   schedule 15.04.2011