2 回答
TA贡献1893条经验 获得超10个赞
我相信您将 TCP 保持连接与 HTTP 保持连接(持久连接)混淆了。这些是不相关的概念。从您的问题来看,您的意思可能是 HTTP 持久连接。
在 HTTP/1.1 中,持久连接是默认设置NSURLSession
,几乎每个 HTTP/1.1 客户端都使用它。你必须要求关闭它们。您可以检查一个Connection: close
在HTTP标头,或者在服务器端,您可以检查Close
的领域http.Request
。但我相信你会得到持久的连接。这意味着您不必为每个请求重新协商 TLS 隧道(或至少是 TCP 三向握手)。(尽管如果您发出并行请求,仍然需要协商多个连接。HTTP/1.1 一次只能处理一件事,并且NSURLSession
会尝试使用连接池来提高响应时间。)
TCP keep-alives 是完全不同的事情。它会定期向另一端发送“ping”以确保它仍然可以访问。有很多方法可以让您失去网络连接,并且直到您下次尝试通信时才知道,通常的症状是连接挂起,您需要超时。理论上,TCP keep-alive 只是发现这一点的工具,但我几乎从未发现它实用。很难正确配置(尤其是在 Cocoa 中)。您几乎总是需要为您的应用程序构建更高级别的“ping”功能,而不是依赖于此。
但是把它解决你的问题,HTTP/1.1 可能对你来说很好,但是你需要仔细管理你的响应。如果你对每封信都提出一个新的请求并发回大量的回复,那么这会很糟糕。您将让所有连接池忙于下载您要扔掉的东西。你需要首先关注好的算法。至少,您可能只想一次发送几个结果,并在您的 API 中提供“分页”方法,以便为同一搜索请求更多结果。
- 2 回答
- 0 关注
- 216 浏览
添加回答
举报