[問題] boost asio socket 的 delay (local)

看板C_and_CPP (C/C++)作者 (handsome01)時間9年前 (2017/03/01 16:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1488358276.A.168.html
文章代碼(AID): #1Ojek45e (C_and_CPP)
文章代碼(AID): #1Ojek45e (C_and_CPP)