2011-11-14 7 views
5

Ho un pulsante di ricerca che accede a un server ogni volta che lo preme. Il problema è che se lo preme più volte di seguito, funzionerà correttamente. Tuttavia, se aspetto 5 secondi, la prima pressione non funzionerà. Semplicemente non riceve una risposta. La seconda stampante funzionerà e quindi il pulsante successivo verrà premuto fino a quando attendo un certo periodo di tempo (~ 5 secondi)Soluzione keepalive per Android http, ma è permanente?

Quindi, in pratica, a meno che non si cerchi costantemente nuove cose entro 5 secondi, la prima pressione del pulsante ha vinto non fare nulla

questo è risolto con l'

  System.setProperty("http.keepAlive", "false"); 

Tuttavia, ho letto che questo si libera di connessioni persistenti in cui una nuova connessione TCP deve essere fatto ogni volta che clicco quel tasto. Questo è più lento ma non è bacato.

È una soluzione errata? Ho letto che questo non risolve davvero nulla. Mi piacerebbe un po 'd'aiuto, grazie.

+0

Sto affrontando un problema simile, ma non riesco a ottenere dove devo aggiungere questa linea? Voglio dire prima di connetterti, prima di leggere la risposta ..? Pls help – AndroidGuy

+0

scusa, non ricordo affatto. Ho chiesto questo anni fa e non ho fatto lo sviluppo Android da allora. basta giocare con esso – volk

risposta

4

Lei ha detto:

Tuttavia, se aspetto di 5 secondi, la prima pressione non funzionerà. Semplicemente non riceve una risposta.

Penso che il server non riceve nemmeno una richiesta nel tuo caso. Penso che impostare http.keepAlive su false sia una buona soluzione. Ho trascorso una discreta quantità di tempo a indagare su questo problema ed è più che ovvio che si tratta di un bug nella libreria Android.

Il motivo è che il server non desidera mantenere tutte queste connessioni aperte a causa di un numero potenzialmente elevato di esse in modo da chiuderne alcune di volta in volta. Tuttavia, il pool di connessioni utilizzato nella libreria Android non accetta questo fatto e tenta comunque di utilizzare la vecchia connessione chiusa.

Disattivare http.keepAlive è una soluzione alternativa piuttosto che una soluzione, tuttavia si ottiene una gestione HTTP affidabile, sebbene con alcuni costi di prestazioni.

+0

grazie. questo è da molto tempo fa però p – volk

+0

Forse hai trovato una soluzione migliore da allora? –

+0

Mi ricordo di aver appena seguito la correzione che ho scritto nella mia domanda, e in effetti non ho mai lavorato con Android, scusa – volk

0

Un ClientConnectionManager gestisce internamente le connessioni gestite, ma distribuisce le istanze di ManagedClientConnection. Questa interfaccia si astrae dalle operazioni di socket sottostanti e fornisce metodi convenienti per l'apertura e l'aggiornamento dei socket al fine di stabilire un percorso. L'operatore è incapsulato dal gestore delle connessioni e chiamato automaticamente.

org.apache.http.conn

+0

grazie per la risposta, tuttavia, non sono sicuro se questo risponde alla mia domanda – volk

Problemi correlati