Ich führe zu einem Problem in einer OS X-Anwendung, die mit NSURLConnection mehrere dauerhafte Verbindungen zum selben Host erstellt. Ich erstelle eine separate Verbindung für verschiedene Räume und bleibt während der gesamten Zeit, in der der Raum offen ist, verbunden, um eine Streaming-API zu nutzen. Wenn viele Räume geöffnet werden, funktioniert es nicht mehr richtig.
Ich habe eine separate Beispiel-App erstellt, die 10 Verbindungen erstellt. Es scheint, dass nur 6 Verbindungen funktionieren und die anderen in der Warteschlange stehen. Weiß jemand, ob es eine Möglichkeit gibt, dieses Limit zu umgehen? Ich kann es nirgendwo dokumentiert finden. Die einzige Problemumgehung, die ich gefunden habe, ist scheinbar pro Host-Name, so dass das Testen mit "localhost" und "127.0.0.1" 6 Verbindungen pro Host erlaubt. Ich habe hier ein Beispielprojekt mit Client und Server hochgeladen - Ссылка .
Ich habe ein Radar für etwas eingereicht, das wie das selbe Problem aussieht, aber auf iOS. Ich habe festgestellt, dass nicht mehr als 5 Verbindungen gleichzeitig geöffnet sein können. Die Verbindungen müssen nicht auf dieselbe Domäne verweisen. Alles danach würde in die Warteschlange gestellt werden. Wenn also 5 Verbindungen für einen extrem langsamen Endpunkt geöffnet sind, werden keine anderen Verbindungen ausgeführt.
Radar: Ссылка
Apples Antwort:
Dies ist der Effekt unseres Verbindungscaches NSURLConnection. Es wird erwartet. Wir erwarten, diese Art der Konfiguration mit einer neuen API zu behandeln.
Ich fragte, ob sie mir mehr Informationen geben könnten (variiert das? Hat die Art der Verbindung Auswirkungen?) und sie sagten:
Leider können wir keine Details zum Verhalten der Verbindungsbeschränkung angeben.
Benutzeragenten im Allgemeinen (Chrome, Firefox, Safari) verwenden sechs simultane TCP-Verbindungen pro Hostname mit möglichen Einzelfällen.
Sie können diese Einschränkung durch Verwendung der CFNetwork-API (CFHTTPMessage) aufheben.
Hier ist der CFNetwork Programming Guide. Ссылка
BTW: Wenn Sie sich für die Verwendung von CFNetwork entscheiden, müssen Sie den Proxy umgehen und sich authentifizieren.
Ich wünschte, dies könnte helfen!
Tags und Links objective-c macos cocoa nsurlconnection