Red de conocimiento informático - Material del sitio web - ¿Cómo implementar una conexión larga entre Android y el servidor?

¿Cómo implementar una conexión larga entre Android y el servidor?

Reimprimir esta función es en realidad sincronización de datos. Al mismo tiempo, se deben considerar el consumo de energía del teléfono móvil, el tráfico de la red y otros factores limitantes. Por lo tanto, generalmente existen las dos soluciones siguientes. terminal móvil:

1. Uno es consultar datos del servidor con regularidad, generalmente utilizando el protocolo HTTP para acceder al servidor web, que se llama sondeo

Hay una conexión larga; entre el terminal móvil y el servidor, y se utiliza una conexión larga XMPP. p>2. El otro es establecer una conexión larga entre el terminal móvil y el servidor, utilizando una conexión larga XMPP, llamada Push.

Push tiene ventajas obvias en términos de consumo de energía, tráfico y latencia de datos. Sin embargo, las desventajas de usar Push son:

Para el cliente: los costos de implementación y mantenimiento son relativamente altos, y mantener conexiones largas en redes inalámbricas móviles tiene ciertas dificultades técnicas en el desarrollo.

Para servidores: todavía existen dificultades de desarrollo sobre cómo implementar tecnologías como la concurrencia multinúcleo, la programación de trabajos de CPU y el mantenimiento concurrente de conexiones largas masivas.

Antes de hablar de los principios del programa Push, primero comprendamos las características de las redes inalámbricas móviles.

Características de las redes inalámbricas móviles:

Debido al número limitado de IP v4, las IP asignadas a los terminales de telefonía móvil por los operadores son todas las IP de la intranet del operador y la red móvil El teléfono debe pasar por la puerta de enlace del operador debe realizar la traducción de direcciones de red (NAT) para conectarse a Internet. En pocas palabras, la puerta de enlace del operador debe mantener la correspondencia entre la IP y el puerto de la red externa y la IP y el puerto de la red interna para garantizar que los teléfonos móviles de la red interna puedan comunicarse con el servidor de Internet

El módulo GGSN (Gateway GPRS

Nodo de soporte Nodo de soporte Gateway GPRS) implementa la función NAT.

Dado que la mayoría de los operadores de redes inalámbricas móviles intentan reducir la carga en la tabla de mapeo NAT de la puerta de enlace, si descubren que no hay comunicación de datos en el enlace durante un período de tiempo, eliminarán la tabla correspondiente. , provocando que el enlace con El camino quede interrumpido. (Para obtener más información sobre lo que hace NAT y cómo funciona, consulte mi otra publicación de blog: Uso de UDP (TCP) y NAT transversal en redes LAN)

Push implementa una conexión de larga duración en la plataforma Android:

Como sabemos que para que el teléfono móvil se comunique con Internet, debe pasar por la puerta de enlace del operador, para evitar que la tabla de mapeo NAT deje de ser válida, debemos enviar datos al Internet de vez en cuando, porque es solo para evitar que la tabla de mapeo NAT no sea válida, por lo que solo se envían datos de longitud 0.

En este momento se utilizan temporizadores. En el sistema Android, normalmente hay dos tipos de temporizadores:

1.java.util.Timer

2. android.app.AlarmManager

Análisis:

Temporizador: las tareas relacionadas se pueden ejecutar según un plan o período de tiempo. Sin embargo, Timer necesita usar WakeLock para mantener la CPU despierta y garantizar la ejecución de tareas, lo que consumirá mucho tráfico cuando la CPU esté en estado de suspensión y no se puede activar para realizar tareas, por lo que obviamente no es adecuado para; aplicaciones móviles.

AlarmManager: La clase AlarmManager pertenece al paquete del sistema Android y se utiliza para administrar las clases de administración del módulo RTC. El módulo RTC está involucrado aquí y para comprender mejor la diferencia entre los dos, debemos comprender la diferencia real entre los dos.

RTC (Reloj de tiempo real) es un reloj de alarma en tiempo real en sistemas integrados que generalmente se utiliza para proporcionar la hora confiable del sistema, incluidas horas, minutos, segundos, años, meses, etc. Se requiere que el sistema funcione normalmente incluso en estado apagado (generalmente alimentado por una batería de respaldo) y no tiene demasiados requisitos para circuitos auxiliares periféricos. Por lo general, solo requiere un circuito de alta precisión de 32,768 KHz.

Cristales, así como resistencias y condensadores. (Si está interesado en este aspecto, puede consultar la información relevante usted mismo. Aquí hay una introducción aproximada)

Bien, volvamos al tema. Por lo tanto, AlarmManager también se denomina despertador programado global. Esto significa que cuando uso AlarmManager para programar una tarea, la CPU puede dormir normalmente y solo cuando se ejecuta la tarea, la CPU se reactiva, lo cual es un proceso muy corto.

La siguiente es una breve introducción a su uso:

1. Similar a la función de temporizador:

// Obtener AlarmManager

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

am = (AlarmManager)getSystemService(ALARM_SERVICE);<

/ Establecer cronograma de ejecución de tareas

am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000,

sender); //Ejecutar solo desde firstTime y luego nuevamente cada 5 segundos

2 Implementar la función de sincronización global:

//Get AlarmManager

AlarmManager

am = (AlarmManager)getSystemService(ALARM_SERVICE);

/. /Establecer tareas Programación de ejecución

am.setRepeating(AlarmManager.ELAPSED_REALTIME);

am.setRepeating(AlarmManager.ELAPSED_REALTIME);

am.setRepeating(AlarmManager. ELAPSED_REALTIME) ;

3.ELAPSED_REALTIME_WAKEUP, firstTime,

5*1000, sender); //Inicia la ejecución solo desde firstTime y luego ejecútala cada 5 segundos

Resumen: En Android, cuando usa Push en el cliente, debe usar AlarmManager para implementar la función de latido para lograr realmente una conexión larga.