在我的应用程序中,我有一个QNetworkAccessManager
实例,用于发送和接收所有网络流量。流量完全由HTTP GET请求和响应组成。
目前我已经硬编码,以便应用程序每10秒发送一次请求,我注意到在Windows资源监视器中它会在每次请求时不断建立新的连接。
发现这很奇怪我将标头Connection: Keep-Alive
添加到每个传出请求,但它仍然在每个请求上建立新连接。
以下是针对一个请求/响应周期的完整Wireshark捕获:
+-----------+--------+-------------+-------------------------+
| Timestamp | Source | Destination | Info |
+-----------+--------+-------------+-------------------------+
| 0.000000 | client | server | SYN |
| 0.020673 | server | client | SYN, ACK(1) |
| 0.020810 | client | server | ACK(1) |
| 0.021529 | client | server | HTTP GET request |
| 0.081772 | server | client | ACK(286) |
| 0.083658 | server | client | HTTP 200 OK (with data) |
| 0.133877 | client | server | ACK(286) |
| 5.081253 | server | client | FIN, ACK(286) |
| 5.081449 | client | server | ACK(1072) |
| 5.081606 | client | server | RST, ACK(1072) |
+-----------+--------+-------------+-------------------------+
从表中可以看出,服务器在5秒不活动后发送FIN,ACK,客户端(我猜想是QNetworkAccessManager?)以ACK 和 RST,ACK响应并且连接是已关闭,即使我已设置Connection: Keep-Alive
标题。
我不是TCP通信专家,所以我不确定客户端发送RST,ACK是什么意思。
我的问题是:这是客户端还是服务器端问题?可以做些什么来确保连接保持活力?
提前致谢!