0
  1. 在内网,网络好
  2. 服务器 A 会同时通过 http 服务向服务器 B 发送大量文件
  3. Http协议为HTTP 1.1,默认使用持久连接
  4. [更新] 使用一个连接池来容纳 100 个连接
  5. [更新]一个连接一次发送一个文件
  6. [更新] Onnection 不会被关闭(持久连接),将被重用于发送下一个文件
  7. 每个文件的大小为 7K 到 30K

问题:

在上述情况下,持久连接会比非持久连接有更好的性能吗?

我问这个问题是因为我们发现上传文件时连接会被阻塞很长时间。我建议使用非持久连接,因为我认为它更稳定,但我的同事建议使用持久连接,因为他认为持久连接具有更好的性能。


更新

看到更新的问题,谢谢~

4

1 回答 1

0

在 HTTP 1.1 中,持久连接允许流水线但不允许并行。(参见 RFC 2616)这意味着如果您在 100 个线程之间共享您的连接并且每个线程发送一个文件,您将一次发送这 100 个文件(以某种顺序)并按发送顺序接收每个文件的响应. 在 100 个线程上发送并没有任何优势,因为它们只是排队一次发送和接收一个。

可以使用多个连接更快地发送,因为这将允许它们实际并行运行。但这取决于许多其他因素。根据您的网络,设置和拆除 100 个连接可能比通过一个连接进行管道衬砌要慢。此外,服务器可能不喜欢您打开 100 个单独的连接。更糟糕的是,服务器可能只会在某些时候拒绝你,这很让人头疼。

我建议采取中间道路:例如,打开 5 个持久连接(仅使用 5 个线程)并在每个连接下发送 20 个文档。HTTPClient 有一个BasicConnPool来做这种事情,尽管它可能对您的需求来说太基本了。

于 2014-01-24T07:58:55.023 回答