哪个更快的tcp连接?

时间:2013-03-05 20:45:34

标签: tcp boost-asio

一个简单的问题:

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

“更快”可能意味着两件事:

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

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

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

答案 1 :(得分:0)

你越是思考这个问题,你将越多地妨碍TCP完成工作,并且会越糟糕。只需使用尽可能大的缓冲区来流式传输数据。