2017-03-28 11 views
0

クライアントからサーバーへのソケット書き込みにかかる合計時間を測定するには、次のコードを使用します。 (コールバックメソッド呼び出しが宛先ソケットへのデータの正常な書き込み(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()); 
     } 

答えて

0

いいえ私はそうは思わない。私は、それがあなたのOSのネットワークスタックのバッファにデータを取得するのに必要な時間を測定すると思うが、データが接続の反対側でプログラムに転送されて読み込まれるのにかかる時間ではない。あなたが行うことができる唯一の方法は、両端に正確な時計を置き、送信時間を経過時間の計算を行うことができるようにメッセージの一部として受信者に送信することです。

0

これは、今回がデータ転送の実際の「ネットワークタイム」であることを保証しますか?

いいえソケット送信バッファにデータを転送する時間を測定します。ソケット送信バッファが十分に充分に満杯であり、すべてのデータがすぐに適合するわけではない場合、ソケット送信バッファを十分に使い切ってすべての新しいデータに対応できる時間も測定されます。すべてデータをサーバーに送信する時間は測定されません。そうでない

(TCP-ACKを受信した)コールバックメソッドの呼び出しが宛先ソケットへのデータの書き込みが成功で行われると仮定

。すべてのデータがソケット送信バッファに転送されたときに呼び出されます。

0

これは、データをネットワークスタックの送信バッファに入れる時間を測定します。 "network time"を計算する場合は、 "ping"コマンドのようにicmp :: socketを使用します。ここ

このページでブースト文書 boost examples

検索 "ICMP" の一例である

関連する問題