8

我在 OS X 应用程序中遇到了一个问题,该应用程序使用 NSURLConnection 创建到同一主机的多个持久连接。我为不同的房间创建了一个单独的连接,并且在房间打开以使用流式 API 的整个过程中保持连接。打开许多房间时,它会停止正常工作。

我创建了一个单独的示例应用程序,它创建了 10 个连接,它似乎只允许 6 个连接工作,而其他连接则在排队。有谁知道是否有办法覆盖这个限制?我在任何地方都找不到它的记录。我发现的唯一解决方法是它似乎是每个主机名,因此使用“localhost”和“127.0.0.1”进行测试允许每个主机有 6 个连接。我在这里上传了一个带有客户端和服务器的示例项目 - http://cl.ly/1x3K0D1F072V3U2T0C0I

4

2 回答 2

5

我为似乎相同但在 iOS 上的问题提交了 Radar。我发现一次打开的连接不能超过 5 个。连接不必指向同一个域。之后的任何事情都会排队。因此,如果您有 5 个连接打开到一个极慢的端点,则任何其他连接都不会通过。

雷达: http://openradar.appspot.com/radar?id= 2542401

苹果回复:

这是我们的 NSURLConnection 连接缓存的效果。这是预期的。我们希望使用新的 API 来解决这种类型的配置。

我问他们是否可以给我更多信息(它会有所不同吗?连接类型会影响它吗?)他们说:

不幸的是,我们无法提供有关连接限制行为的详细信息。

一般的用户代理(Chrome、Firefox、Safari)每个主机名使用六个同时的 TCP 连接,可能是一次性的。

于 2013-04-04T17:49:39.957 回答
0

你可以通过使用 CFNetwork API (CFHTTPMessage) 来打破这个限制。

这是 CFNetwork 编程指南。 https://developer.apple.com/library/mac/documentation/Networking/Conceptual/CFNetwork/Introduction/Introduction.html#//apple_ref/doc/uid/TP30001132

顺便说一句,如果您决定使用 CFNetwork,则需要绕过代理并进行身份验证。

希望这能有所帮助!

于 2014-02-21T10:52:58.267 回答