一个快速的问题:
我正在使用 boost:asio (tcp) 通过网络发送数据。哪个会更快:使用流缓冲区,还是手动将数据作为数据包分割和发送?
特别是,如果要传输的数据大小通常超过 100mb 怎么办?
谢谢!
一个快速的问题:
我正在使用 boost:asio (tcp) 通过网络发送数据。哪个会更快:使用流缓冲区,还是手动将数据作为数据包分割和发送?
特别是,如果要传输的数据大小通常超过 100mb 怎么办?
谢谢!
“更快”可能意味着 2 个不同的东西:
最小延迟。这意味着最小化客户端生成和接收数据包数据之间的时间。在这种情况下,它“更快”地在具有 TCP_NODELAY 选项的套接字上手动制作数据包。
最大化带宽速度。这意味着您希望以最大 Mb/s 速度传输数据(例如文件)。在这种情况下,最好禁用 TCP_NODELAY 并发送数据sendfile(2)。
现在关于 boost::asio。这也是为了最小化延迟,您也设置了 TCP_NODELAY 选项(示例)。为了获得最大的总传输速度,最好关闭此选项并使用流缓冲区,或者通过native_handle()获取本机句柄并在其上使用 sendfile(在这种情况下,需要做更多工作以使其“好”异步)。
你想得越多,你就越会妨碍 TCP 的工作,它的性能也会越差。只需使用尽可能大的缓冲区来流式传输数据。