Saya mengirim sejumlah besar data ke server. Sekarang ketika saya telah mengirim data dan menunggu respons server, tiba-tiba perangkat android saya kehilangan koneksi internet.
Jadi yang biasa saya lakukan adalah, menampilkan dialog peringatan koneksi hilang, tetapi di sisi server data sudah diproses dan diperbarui di suatu tempat misalnya pada URL apa pun. Tapi ponsel android saya tidak mengetahui hal ini karena tidak pernah mendapat respons. Bagaimana mengatasinya.
Apakah itu bisa dilakukan di sisi server atau di Android sendiri Bagaimana?
Bagaimana server tahu bahwa ponsel android tidak akan mendengarkan responsnya?
Mungkin perspektif optimasi komunikasi klien-server.
server
server-side
client-side
android-development
mayank_droid
sumber
sumber
Jawaban:
Ini adalah masalah yang cukup umum dengan transaksi asinkron, dan terbagi dalam beberapa bagian.
Hal hebat tentang HTTP adalah cukup mudahnya untuk menyelesaikan semua masalah ini.
Bayangkan struktur URL seperti ini:
Menggunakan pos HTTP untuk mengirim permintaan ke server, menggunakan id permintaan klien yang unik - dan meminta server merespons dengan ID pekerjaan. Dari perspektif klien, jika respons ini tidak terjadi, maka permintaan harus dikirim ulang. Dari perspektif server, permintaan id klien perlu di-cache selama beberapa menit, seandainya klien mengirim permintaan yang digandakan. Permintaan duplikat ditangani hanya dengan mengembalikan ID pekerjaan yang sama ke klien.
Klien mendapatkan hasil permintaan dari URL hasil. Panggilan ini dapat diulang sesering yang diperlukan untuk mendapatkan hasil. Jika dipanggil sebelum hasilnya tersedia, maka responsnya bisa berupa respons TANPA KONTEN sehingga klien tahu bahwa server mengenali id pekerjaan tetapi belum memiliki konten. Jika id pekerjaan tidak dikenali maka NOT-FOUND adalah respons yang sesuai.
Hasil akhirnya adalah bahwa klien selalu dapat membuat tindakan yang masuk akal ketika jaringan hilang dan dipulihkan, dan juga server selalu dapat memproses permintaan dari klien secara masuk akal.
sumber
Ini berada di bawah dasar-dasar komunikasi protokol. Transaksi telah diminta oleh klien Android, dan Server harus melakukan transaksi. Jika transaksi tergantung pada pengakuan klien Android maka ini disebut komunikasi ACK / NAK.
ACK (pengakuan) dan NAK (negatif-pengakuan) digunakan untuk memberi tahu pihak lain hasil dari permintaan.
Apa yang Anda tanyakan adalah jenis pertukaran handshaking antara klien dan server, dan itu dapat dilakukan dengan pertukaran ACK / NAK dasar.
Berikut adalah contoh Android yang mengunggah file dengan pengakuan dua arah.
Dalam contoh di atas saya telah menambahkan
#id
pengidentifikasi unik untuk transaksi. Server harus menerima file, membuat catatan transaksi dan mengirimkannya sebagai tanggapan kembali ke Android. Android kemudian harus mengikuti dengan pengakuan transaksi itu (atau sebagai alternatif NAK untuk penolakan).Berikut adalah contoh pemutusan Android selama jabat tangan.
Dalam contoh di atas Server telah menerima file yang diunggah dan mengirim
#id
respons ACK kembali ke Android, tetapi Android tidak pernah merespons dengan ACK. Perangkat Android gagal menyelesaikan handshaking. Terserah Anda untuk memutuskan bagaimana Server harus menangani ini. Hancurkan transaksi, simpan transaksi dan tunggu hingga perangkat Android kembali nanti atau selesaikan transaksi.Server dapat berasumsi bahwa karena perangkat tidak merespons dengan ACK. Bahwa perangkat Android tidak memperbarui keadaan internal untuk menunjukkan bahwa unggahan berhasil. Saya akan membuang transaksi dan memungkinkan perangkat untuk mengulanginya di masa depan.
sumber