2013-03-05 41 views
0

快速问题:哪一个tcp连接更快?

我使用boost:asio(tcp)通过网络发送数据。哪一个会更快:使用流缓冲区,还是手动分组和发送数据?

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

谢谢!

回答

2

“更快” 可能意味着两种不同的东西:

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

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

现在关于boost :: asio。这对于设置TCP_NODELAY选项的最小延迟也是如此(example for this)。为了获得最大总传输速度,最好关闭此选项并使用streambuffer,或通过native_handle()并使用sendfile对其进行本地处理,并使用sendfile(在这种情况下,需要完成更多工作以使其“良好”异步) 。

+0

谢谢。这回答了我有关性能的很多问题。我将设置TCP_NODELAY并使用流缓冲区。 – lanortha 2013-03-06 23:57:00

0

你越是想到这一点,就越会得到TCP执行其工作的方式,而且执行的越糟糕。只需传输数据,尽可能使用大缓冲区。

+0

感谢您的回复。我想我会走缓冲路线。 – lanortha 2013-03-06 23:55:47