Estoy escribiendo una aplicación usando Boost asio en la que el cliente y el servidor intercambian mensajes que se serializan utilizando los proto-buffers de Google. No sé cuál es el tamaño del mensaje serializado que se envía a través de la red. Parece que los objetos proto-buf no tienen ningún delimitador.Lectura de objetos Protobuf usando boost :: asio :: read_async
Aquí están los contenidos del archivo .proto.
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Así es como estoy escribiendo desde el servidor
tutorial::Person p;
p.set_name("abcd pqrs");
p.set_id(123456);
p.set_email("[email protected]");
write(p);
boost::asio::streambuf b;
std::ostream os(&b);
p.SerializeToOstream(&os);
boost::asio::async_write(socket_, b,
boost::bind(&Server::handle_write, this,
boost::asio::placeholders::error));
En el cliente que estoy leyendo el mensaje enviado anteriormente usando ASIO impulso :: :: async_read. ¿Cómo puedo averiguar que el valor de arg
se establezca como argumento en boost::asio::transfer_at_least
, en el código siguiente?
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(arg),
boost::bind(&Client::handle_read_header, this,
boost::asio::placeholders::error));
O bien, ¿cómo puedo asegurarme de que boost :: async_read regrese después de leer todo el objeto?
No sé la respuesta, pero también estoy interesado, así que +1. –
¿Has resuelto tu problema? Estoy muy interesado, y Steel no tiene una clara idea acerca de poner protobuf + boost :: asio juntos. –