Sto scrivendo un'applicazione utilizzando Boost asio in cui il client e il server scambiano messaggi serializzati utilizzando i proto-buffer di google. Non so quale sia la dimensione del messaggio serializzato inviato sulla rete. Sembra che gli oggetti proto-buf non abbiano alcun delimitatore.Lettura di oggetti Protobuf tramite boost :: asio :: read_async
Ecco i contenuti del file .proto.
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
Ecco come sto scrivendo dal server
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));
Nel client sto leggendo il messaggio inviato sopra utilizzando boost :: asio :: async_read. Come faccio a trovare il valore di arg
come argomento per boost::asio::transfer_at_least
, nel codice qui sotto?
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(arg),
boost::bind(&Client::handle_read_header, this,
boost::asio::placeholders::error));
Oppure come faccio a verificare che boost :: async_read ritorni dopo aver letto l'intero oggetto?
Non conosco la risposta, ma mi interessa pure, quindi +1. –
Hai risolto il tuo problema? Sono molto interessato a, e l'acciaio non ha la chiara volontà di mettere protobuf + boost :: asio insieme –