作者handsome01 (handsome01)
看板C_and_CPP
標題[問題] boost asio socket 的 delay (local)
時間Wed Mar 1 16:51:13 2017
開發平台(Platform): (Ex: Win10, Linux, ...)
win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Boost 1.59.0
問題(Question):
各位板友好,最近在試著使用 boost asio 的 socket 時發生一些狀況不知道如何解決,
想請大家幫忙。程式流程如下:
client 會透過 async_write 將 data 送給 server,
之後藉由 async_read 等待 server 將處理完的 data 送回,
client 的 async_operation 的 handler 都是用 future,timeout = 2 秒。
問題如下:
server 的運算時間大概是 10 ms 左右,因為 server 跟 client 都在同一台電腦,
所以可以預期 server 一送出 data 時,client 應可以馬上收到。
可是,實際上會發生一個 packet 慢、一個 packet 快的情形,
快的大約 10 ms、慢的會等到 30 ~ 40 ms 才收到,
通常時間是 快、慢、快、慢,這樣交替。
測量方式如下:
auto start_time = std::chrono::steady_clock::now();
auto read_result = async_read(..., use_future);
auto read_future_status = read_result.wait_for(timeout);
auto end_time = std::chrono::steady_clock::now();
上網 google 過有試過兩種做法:
1. 把 streambuf size 開大一點,因為預設好像是 512 Bytes,
我開到 4096 Bytes(data size 最大不超過 1500 Bytes),依然沒用。
2. 把 socket 的 no_delay 設為 true,關掉 Nagle's algorithm 和 Delay Ack,
一樣還是會有上述的問題。
上網 google 不到其他的解答,所以才希望能得到板友的協助。
抱歉第一次在這邊 po 文,如果有說的不清楚或需要補充的地方,
會盡量改進。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.160.71
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1488358276.A.168.html