J'envoie une énorme quantité de données au serveur. Maintenant, alors que j'ai envoyé les données et que j'attends la réponse du serveur, soudainement mon appareil Android perd sa connexion Internet.
Donc, ce que j'avais l'habitude de faire était d'afficher une boîte de dialogue d'alerte de perte de connexion, mais côté serveur, les données étaient déjà traitées et mises à jour quelque part, par exemple sur n'importe quelle URL. Mais mon téléphone Android ne le sait pas car il n'a jamais reçu de réponse. Comment le résoudre.
Que cela puisse être fait côté serveur ou sur Android lui-même Comment?
Comment le serveur saurait-il que le téléphone Android ne va pas écouter la réponse?
Il peut s'agir d'une perspective d'optimisation de la communication client-serveur.
la source
Réponses:
Il s'agit d'un problème assez courant avec les transactions asynchrones et qui se divise en plusieurs parties.
La grande chose à propos de HTTP est qu'il est assez facile de résoudre tous ces problèmes.
Imaginez une structure d'URL comme celle-ci:
Utiliser la publication HTTP pour envoyer une demande au serveur, en utilisant un identifiant de demande client unique - et demander au serveur de répondre avec l'ID du travail. Du point de vue des clients, si cette réponse ne se produit pas, la demande doit être renvoyée. Du point de vue des serveurs, l'ID de demande du client doit être mis en cache pendant quelques minutes, au cas où le client enverrait des demandes en double. Les demandes dupliquées sont traitées simplement en renvoyant le même ID de travail au client.
Le client obtient les résultats de la demande à partir de l'URL des résultats. Cet appel peut être répété autant de fois que nécessaire pour obtenir les résultats. Si elle est appelée avant que les résultats ne soient disponibles, alors la réponse pourrait être une réponse NO-CONTENT afin que le client sache que le serveur reconnaît l'ID du travail mais n'a pas encore le contenu. Si l'ID du travail n'est pas reconnu, NOT-FOUND est la réponse appropriée.
Le résultat final est que le client peut toujours effectuer une action sensible lorsque le réseau est perdu et récupéré, et de même le serveur peut toujours traiter les demandes du client de manière sensible
la source
Cela relève des principes de base de la communication protocolaire. Une transaction a été demandée par le client Android et le serveur doit effectuer la transaction. Si la transaction dépend de l'accusé de réception du client Android, appelez la communication ACK / NAK.
ACK (accusé de réception) et NAK (accusé de réception négatif) sont utilisés pour dire à l'autre côté le résultat d'une demande.
Ce que vous demandez, c'est un type d' échange de liaison entre le client et le serveur, et il peut être effectué avec un échange ACK / NAK de base.
Voici un exemple de téléchargement par Android d'un fichier avec accusé de réception bidirectionnel.
Dans l'exemple ci-dessus, j'ai ajouté un
#id
identifiant unique pour la transaction. Le serveur doit recevoir les fichiers, créer un enregistrement de transaction et l'envoyer comme réponse à Android. Android devrait ensuite suivre avec un accusé de réception de cette transaction (ou alternativement un NAK pour un rejet).Voici un exemple de déconnexion d'Android pendant la prise de contact.
Dans l'exemple ci-dessus, le serveur a accepté les fichiers téléchargés et renvoyé une
#id
réponse ACK à Android, mais Android ne répond jamais avec un ACK. L'appareil Android n'a pas pu terminer la négociation. C'est à vous de décider comment le serveur doit gérer cela. Détruisez la transaction, conservez la transaction et attendez que l'appareil Android revienne plus tard ou terminez la transaction de toute façon.Le serveur peut supposer que puisque le périphérique n'a pas répondu avec ACK. Que l'appareil Android n'a pas mis à jour son état interne pour indiquer que le téléchargement a réussi. Je rejetterais la transaction et autoriserais l'appareil à la répéter à l'avenir.
la source