2013-10-24 19 views
6

Ho ottenuto un'app che esegue alcune attività di rete in base all'attività dell'utente. Il carico utile abituale inviato dall'app è 100-200 byte quindi in pratica non ci sono compiti di sollevamento pesanti. Questi compiti di solito funzionano senza problemi (statisticamente il 99,9% o le richieste vanno bene), ma a parte queste attività di rete, la mia app invia anche l'heartbeat ai nostri server (che sono su Amazon EC2 (us-east1- d se ciò avrebbe importanza)). L'heartbeat viene inviato ogni 10 secondi come richiesta POST ordinaria su HTTPS - e questo è ciò che non funziona per me in quanto il tasso di errore è molto più alto di quello osservato nelle normali attività di rete - durante il mio recente test di 7 ore il 25% delle richieste di heartbeat non è riuscito (ma ho visto anche il 35% di gocce) e di solito si mantiene a quel ritmo. Quando disattivo SSL, il tasso di errore rimane sul mio dispositivo di test all'8% percento. Questo probabilmente non sarebbe davvero un grosso problema se questi errori rientrassero in qualsiasi modello (vale a dire ogni quarto ecc.) Che potrebbe significare un filtro basato sulla frequenza, o fallirebbe vicino a ogni ora o giorno che potrebbe significare che tipo di limite di richiesta è fissato da qualche parte). Ma non succede nulla del genere - a volte una richiesta di 10-15 può fallire in una riga, e questo è male per il battito cardiaco. Inoltre, per peggiorare la situazione, al momento vedo che le richieste non riescono a connettermi al server dallo stesso dispositivo e questo funziona senza problemi). Questo problema si verifica su qualsiasi versione supportata di Android (2.2+).Problemi di rintracciamento delle radici dei problemi di "stabilità" della rete

Io uso il recente httpclientandroidlib per fare le richieste HTTP, così ho iniziato a sospettare che lib fosse un colpevole quindi sono passato a Android Asynchronous HTTP Client ma non ha dato alcun cambiamento. Sto per lo più ottenendo eccezioni come:

NoHttpResponseException: The target server failed to respond The target server failed to respond URL: https://xx.xx.xx.xx/heartbeat/

e per le connessioni SSL abilitati anche:

javax.net.ssl.SSLException: Read error: ssl=0x784bc588: I/O error during system call, Connection reset by peer Read error: ssl=0x784bc588: I/O error during system call, Connection reset by peer URL: https://xx.xx.xx.xx/heartbeat/

Io fondamentalmente vorrei rintracciare il colpevole prima, in modo da sapere che l'applicazione è in esecuzione su reti di telefonia mobile per lo più, Sono aperto a qualsiasi suggerimento su come procedere ulteriormente con questo problema come sono al momento bloccato un po '.

+0

Hai controllato completamente le prestazioni del tuo server? –

+0

"Connessione ripristinata dal peer" questo è probabilmente un problema del server. Per essere chiari, potresti forse rintracciarlo con WireShark. http://www.wireshark.org/ – Devrim

+0

La tua nuova scelta di libreria presenta problemi interessanti: https://github.com/loopj/android-async-http/issues – flup

risposta

0

eseguire questa applicazione e basta fare un ping normale vedere il tasso di errore: https://play.google.com/store/apps/details?id=com.ulfdittmer.android.ping

eseguirlo su entrambi rete mobile (cellulare) e Wi-Fi.

Se si è in WiFi, eseguire ping -n 100 google.com da un laptop per verificare che il router e il punto di accesso alla rete non siano instabili. In tal caso, scollega il router e ricollegalo. I router Linksys e i punti di accesso e i punti di accesso Belkin sono così squilibrati.

Se è necessario un heartbeat da 10 secondi, impostare il timeout HTTP su 3-5 secondi e fallire rapidamente, quindi riprovare se fallisce.

0

Bene se condividi la tua istanza HttpClient attraverso il thread hearthbeat e il thread ui, la normale richiesta di connessione http potrebbe annullare quella in corso. Assicurati che non inviino richiesta contemporaneamente, bloccando l'oggetto o separando le istanze di HttpClient.