Ich implementiere einen Server, der Xml mit Boost an Clients sendet. Das Problem, dem ich gegenüberstehe, ist, dass der Puffer nicht sofort gesendet wird, sondern sich bis zu einem bestimmten Punkt ansammelt und dann das ganze Ding sendet. Dies führt zu einem Problem auf meiner Client-Seite, wenn es die Xml parst, kann es unvollständige Xml-Tag (unvollständige Nachricht) haben. Gibt es eine Möglichkeit, in Boost den Socket zu leeren, wenn eine Nachricht gesendet werden muss? Unten ist der Schreibcode des Servers.
void
ClientConnection::handle_write(const boost::system::error_code& error)
{
if (!error)
{
m_push_message_queue.pop_front ();
if (!m_push_message_queue.empty () && !m_disconnected)
{
boost::asio::async_write(m_socket,
boost::asio::buffer(m_push_message_queue.front().data(),
m_push_message_queue.front().length()),
boost::bind(&ClientConnection::handle_write, this,
boost::asio::placeholders::error));
}
}
else
{
std::err << "Error writting out message...\n";
m_disconnected = true;
m_server->DisconnectedClient (this);
}
}