作者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/cn.aspx?n=bbs/C_and_CPP/M.1488358276.A.168.html