是为频繁请求保持一个套接字打开,还是每次都关闭套接字更好

Posted

技术标签:

【中文标题】是为频繁请求保持一个套接字打开,还是每次都关闭套接字更好【英文标题】:Is it better to keep a socket open for frequent requests, or to close the socket each time 【发布时间】:2013-12-15 20:45:18 【问题描述】:

我正在编写一个程序,它将每秒向服务器发出 1 个 GET 请求。我正在使用一个套接字(QTcpSocket),我想知道我是否应该在我的请求中包含“连接:关闭”,然后为每个请求重新创建套接字,或者是否最好让套接字保持活动状态,因为我在重复每秒一次相同的请求。

【问题讨论】:

我会说保持打开状态。但找出答案的最佳方法是对其进行基准测试,看看它对您的应用程序有什么影响。 通过高延迟链接(例如卫星),您会发现连续连接/断开连接无法达到 1 个请求/秒。 【参考方案1】:

建立 TCP 连接需要不止一次往返。如果您的连接恰好是 SSL 连接,则还有多个往返。如果您计划与同一个目的地多次通信,那么建立连接并在它仍然启动时使用可能是值得的。您可能应该使您的代码发送请求独立于当前正在启动的连接,并在需要时让它[重新]建立连接。

【讨论】:

【参考方案2】:

打开一个套接字需要 3 次数据包交换,关闭它需要 4 次。您应该致力于保持连接打开,而不是在每次事务中都产生这种开销。

【讨论】:

以上是关于是为频繁请求保持一个套接字打开,还是每次都关闭套接字更好的主要内容,如果未能解决你的问题,请参考以下文章

状态保持Cookie

保持套接字服务器在 CentOS 上运行以在 php 中侦听客户端请求

.NET 桌面客户端应用程序:套接字还是 HTTP 请求? [关闭]

在 PHP 中打开异步套接字

.Net 异步套接字操作限制?

最佳实践:每次传输后保持 TCP/IP 连接打开还是关闭?