Estoy enviando una gran cantidad de datos al servidor. Ahora, mientras envié los datos y espero la respuesta del servidor, de repente mi dispositivo Android pierde la conexión a Internet.
Entonces, lo que solía hacer es mostrar un diálogo de alerta de pérdida de conexión, pero en el lado del servidor los datos ya se procesaron y se actualizaron en algún lugar, por ejemplo, en cualquier URL. Pero mi teléfono Android no lo sabe, ya que nunca recibió respuesta. Como resolverlo.
Si podría hacerse en el lado del servidor o en el propio Android ¿Cómo?
¿Cómo sabría el servidor que el teléfono Android no va a escuchar la respuesta?
Puede ser la perspectiva de optimización de la comunicación cliente-servidor.
server
server-side
client-side
android-development
mayank_droid
fuente
fuente
Respuestas:
Este es un problema bastante común con las transacciones asincrónicas, y se divide en varias partes.
Lo mejor de HTTP es que es bastante fácil resolver todos estos problemas.
Imagine una estructura de URL como esta:
Usar la publicación HTTP para enviar una solicitud al servidor, usar una identificación de solicitud de cliente única, y hacer que el servidor responda con la ID del trabajo. Desde la perspectiva del cliente, si esta respuesta no ocurre, entonces la solicitud debe ser reenviada. Desde la perspectiva de los servidores, los ID de solicitud del cliente deben almacenarse en caché durante unos minutos, en caso de que el cliente envíe solicitudes duplicadas. Las solicitudes duplicadas se manejan simplemente devolviendo la misma ID de trabajo al cliente.
El cliente obtiene los resultados de la solicitud de la URL de resultados. Esta llamada se puede repetir tantas veces como sea necesario para obtener los resultados. Si se llama antes de que los resultados estén disponibles, entonces la respuesta podría ser una respuesta SIN CONTENIDO para que el cliente sepa que el servidor reconoce la identificación del trabajo pero aún no tiene el contenido. Si la identificación del trabajo no se reconoce, NOT-FOUND es la respuesta adecuada.
El resultado final es que el cliente siempre puede realizar una acción sensata cuando la red se pierde y se recupera, y del mismo modo, el servidor siempre puede procesar las solicitudes del cliente con sensatez
fuente
Esto cae bajo los fundamentos de la comunicación de protocolo. El cliente de Android ha solicitado una transacción y el servidor debe realizar la transacción. Si la transacción depende del acuse de recibo del cliente de Android, entonces llame a la comunicación ACK / NAK.
ACK (acuse de recibo) y NAK (acuse de recibo negativo) se utilizan para informar al otro lado el resultado de una solicitud.
Lo que se está planteando es un tipo de protocolo de enlace de intercambio entre el cliente y el servidor, y puede llevarse a cabo con un ACK de cambio básica / NAK.
Aquí hay un ejemplo de Android cargando un archivo con reconocimiento bidireccional.
En el ejemplo anterior, agregué un
#id
identificador único para la transacción. El servidor debe recibir los archivos, crear un registro de transacciones y enviarlo como respuesta a Android. Android debería seguir con un reconocimiento de esa transacción (o alternativamente un NAK para un rechazo).Aquí hay un ejemplo de una desconexión de Android durante el apretón de manos.
En el ejemplo anterior, el Servidor ha aceptado los archivos cargados y envió una
#id
respuesta ACK a Android, pero Android nunca responde con un ACK. El dispositivo Android no ha podido completar el apretón de manos. Depende de usted decidir cómo debe manejar esto el servidor. Destruya la transacción, conserve la transacción y espere a que el dispositivo Android regrese más tarde o complete la transacción de todos modos.El servidor puede suponer que ya que el dispositivo no respondió con ACK. Que el dispositivo Android no actualizó su estado interno para indicar que la carga se realizó correctamente. Descartaría la transacción y permitiría que el dispositivo la repita en el futuro.
fuente