我有以下代码来测量从客户端到服务器的套接字写入所花费的总时间。(假设回调方法调用是在成功将数据写入目标套接字(收到 TCP-ACK (时完成的(这是否确保 - 这个时间是数据传输的实际"网络时间"?
void on_successful_read_from_client(const boost::system::error_code& error,
const size_t& bytes_transferred)
{
if (!error)
{
m_telnet_server_write_time = posix_time::microsec_clock::universal_time();
async_write(telnet_server,
boost::asio::buffer(data_from_device_,bytes_transferred),
boost::bind(&bridge::on_successful_send_to_server,
shared_from_this(),
boost::asio::placeholders::error));
}
else
close();
}
void on_successful_send_to_server(const boost::system::error_code& error)
{
if (!error)
{
posix_time::ptime now = posix_time::microsec_clock::universal_time();
if ((now - m_telnet_server_write_time).total_milliseconds() > 0)
{
std::ostringstream log;
log << "Time Taken for server write: " << (now - m_telnet_server_write_time).total_milliseconds() << " ms";
write_log(log.str());
}
不,我认为不会。我认为它测量将数据放入操作系统网络堆栈中的缓冲区所需的时间,而不是将数据传输到连接另一端并由程序读取所需的时间。唯一的方法是在两端都有准确的时钟,并将发送时间作为消息的一部分发送给收件人,以便它可以进行经过的时间计算。
它测量将数据放入网络堆栈中的发送缓冲区的时间。如果要计算"网络时间",请使用ICMP::socket,就像"ping"命令一样。
这是提升文档中的示例提升示例
在此页面中搜索"ICMP">
这是否确保 - 这个时间是数据传输的实际"网络时间"?
不。它测量将数据传输到套接字发送缓冲区的时间。如果套接字发送缓冲区足够满,以至于并非所有数据都立即装入其中,则它还会测量耗尽套接字发送缓冲区以容纳所有新数据的时间。它不测量以任何方式将所有这些数据发送到服务器的时间。
假设回调方法调用是在成功将数据写入目标套接字(收到 TCP-ACK(时完成的
其实不然。当所有数据都已传输到套接字发送缓冲区时,将调用它。