0

一个快速的问题:

我正在使用 boost:asio (tcp) 通过网络发送数据。哪个会更快:使用流缓冲区,还是手动将数据作为数据包分割和发送?

特别是,如果要传输的数据大小通常超过 100mb 怎么办?

谢谢!

4

2 回答 2

2

“更快”可能意味着 2 个不同的东西:

  1. 最小延迟。这意味着最小化客户端生成和接收数据包数据之间的时间。在这种情况下,它“更快”地在具有 TCP_NODELAY 选项的套接字上手动制作数据包。

  2. 最大化带宽速度。这意味着您希望以最大 Mb/s 速度传输数据(例如文件)。在这种情况下,最好禁用 TCP_NODELAY 并发送数据sendfile(2)

现在关于 boost::asio。这也是为了最小化延迟,您也设置了 TCP_NODELAY 选项(示例)。为了获得最大的总传输速度,最好关闭此选项并使用流缓冲区,或者通过native_handle()获取本机句柄并在其上使用 sendfile(在这种情况下,需要做更多工作以使其“好”异步)。

于 2013-03-06T08:55:46.953 回答
0

你想得越多,你就越会妨碍 TCP 的工作,它的性能也会越差。只需使用尽可能大的缓冲区来流式传输数据。

于 2013-03-06T03:02:06.510 回答