2013-02-06 20 views
12

Attualmente stiamo affrontando un problema di prestazioni nella nostra app e riteniamo che alcuni di questi problemi potrebbero essere correlati al fatto che l'app e lo stack di rete AFNetworking sottostante sembrano ignora keep-alive su HTTP 1.1.AFNetworking/NSURLConnection HTTPS keep alive mostra un comportamento strano

Abbiamo ricevuto da Apple che le connessioni persistenti vengono eliminate dopo 3, 6 o 30 secondi rispettivamente, a seconda della versione di iOS e della connettività WiFi/WWAN, indipendentemente dalle informazioni keep-alive sul lato server.

Durante il monitoraggio degli handshake di connessione sui nostri server, abbiamo notato il comportamento strano che una connessione SSL dalla nostra app su un dispositivo iOS è lasciata aperta e non chiusa con un pacchetto FIN. Non appena viene fatta una nuova richiesta dall'app, la connessione sinistra della precedente richiesta viene ALLORA chiusa con un pacchetto FIN e viene creata una nuova connessione.

Mentre comprendiamo che iOS elimina le connessioni per mantenere basso il consumo della batteria, ci chiediamo che non risolva correttamente la connessione esistente e rimandi tale terminazione all'inizio di una nuova richiesta.

Qualcuno potrebbe spiegare questo comportamento e suggerire soluzioni per evitare costosi handshake SSL nelle connessioni coperte da keep-alive in condizioni normali?

+0

Quali versioni di iOS sono interessate? – Adam

+1

Quale valutazione del WWDC? A proposito, la connessione persistente è gestita dal livello CFNetwork. E per quanto ne so, non ci sono API per cambiare il comportamento. Puoi dare un'occhiata a come ASIHttpRequest supporta la connessione permanente. Quindi questo problema non è legato ad AFNetworking o NSURLConnection. E suppongo che molto probabilmente non avremo niente da fare. –

+0

@Adam - Per quanto ne so da iOS 8 è interessato.Here è un'altra domanda che è in qualche modo correlata a http://stackoverflow.com/q/29063803/730807 –

risposta

0

Mi sono imbattuto nello stesso problema alcune settimane fa. La soluzione era forzare il webserver a ignorare l'intestazione keepalive http dal dispositivo iOs e chiudere immediatamente la connessione.

+0

vuoi dire che hai configurato il webserver in tale modo che non supporta le connessioni keep-alive in modo che il problema non venga –