这是我服务器端收到数据后的回调函数
void InnerSession::handle_read( const boost::system::error_code& error, size_t bytes_transferred )
{
if (error || bytes_transferred == 0)
{
std::cout<<"handle_read Error ID"<<error.value()<<error.message()<<std::endl;
std::cout<<"bytes_transferred is "<<bytes_transferred<<std::endl;
return;
}
if(!HandleRawData(error,bytes_transferred))
{
assert(0);
return;
}
boost::asio::async_read(
m_Socket,
boost::asio::buffer(m_buf,gTempBufLen),
transfer_at_least(8),
m_Strand.wrap(boost::bind(&InnerSession::handle_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
}
HandleRawData函数式将m_buf里的数据缓存到内存池,问题是这样子的,当网络负载很大的情况下 ,?在没有调用到?boost::asio::async_read的时候,有新数据到达,这样造成了新数据丢失
我把上面的代码改成这样
void InnerSession::handle_read( const boost::system::error_code& error, size_t bytes_transferred )
{
if (error || bytes_transferred == 0)
{
std::cout<<"handle_read Error ID"<<error.value()<<error.message()<<std::endl;
std::cout<<"bytes_transferred is "<<bytes_transferred<<std::endl;
return;
}
Sleep(10);
if(!HandleRawData(error,bytes_transferred))
{
assert(0);
return;
}
boost::asio::async_read(
m_Socket,
boost::asio::buffer(m_buf,gTempBufLen),
transfer_at_least(8),
m_Strand.wrap(boost::bind(&InnerSession::handle_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
}
加了Sleep函数,数据丢失很严重。请问大神这个怎么解决撒 ?谢谢了
void InnerSession::handle_read( const boost::system::error_code& error, size_t bytes_transferred )
{
if (error || bytes_transferred == 0)
{
std::cout<<"handle_read Error ID"<<error.value()<<error.message()<<std::endl;
std::cout<<"bytes_transferred is "<<bytes_transferred<<std::endl;
return;
}
if(!HandleRawData(error,bytes_transferred))
{
assert(0);
return;
}
boost::asio::async_read(
m_Socket,
boost::asio::buffer(m_buf,gTempBufLen),
transfer_at_least(8),
m_Strand.wrap(boost::bind(&InnerSession::handle_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
}
HandleRawData函数式将m_buf里的数据缓存到内存池,问题是这样子的,当网络负载很大的情况下 ,?在没有调用到?boost::asio::async_read的时候,有新数据到达,这样造成了新数据丢失
我把上面的代码改成这样
void InnerSession::handle_read( const boost::system::error_code& error, size_t bytes_transferred )
{
if (error || bytes_transferred == 0)
{
std::cout<<"handle_read Error ID"<<error.value()<<error.message()<<std::endl;
std::cout<<"bytes_transferred is "<<bytes_transferred<<std::endl;
return;
}
Sleep(10);
if(!HandleRawData(error,bytes_transferred))
{
assert(0);
return;
}
boost::asio::async_read(
m_Socket,
boost::asio::buffer(m_buf,gTempBufLen),
transfer_at_least(8),
m_Strand.wrap(boost::bind(&InnerSession::handle_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred)));
}
加了Sleep函数,数据丢失很严重。请问大神这个怎么解决撒 ?谢谢了
{
if (error || bytes_transferred == 0)
{
std::cout<<"handle_read Error ID"<<error.value()<<error.message()<<std::endl;
std::cout<<"bytes_transferred is "<<bytes_transferred<<std::endl;
return;
} std::cout<<"接受数据包的次数"<<++m_nCount<<std::endl;
if(!HandleRawData(error,bytes_transferred))
{
assert(0);
return;
} boost::asio::async_read(
m_Socket,
boost::asio::buffer(m_buf,gTempBufLen),
transfer_at_least(8),
boost::bind(&InnerSession::handle_read,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
} 是不是m_buf中数据没及时拿走,下一次数据到来之后,m_buf内容又被后面的数据覆盖了?