9 votos

¿Cómo mantienen los dispositivos de Apple las conexiones persistentes con los servidores de Apple para cosas como APN, FindMy network, etc.?

Los dispositivos de Apple, como los iPhones y los Mac, son capaces de recibir notificaciones casi en tiempo real del sistema APN, así como de comprobar con frecuencia la red FindMy, entre otras cosas. Me pregunto cómo estos dispositivos son capaces de mantener conexiones persistentes con los servidores de Apple.

Supongo que los dispositivos de Apple no usarían algo como el sondeo, ya que probablemente se consumiría la batería y se gastarían los datos del móvil. Me pregunto si Apple utiliza algo como WebSockets ¿o tal vez su propio sistema de propiedad?

7voto

Steve Evans Puntos 155

Toma TCP/IP

Es probable que la conexión sea una toma de red utilizando TCP/IP. A opción keep-alive puede ayudar a mantener una conexión tranquila.

El problema interesante es cómo Apple decide manejar los millones de conexiones concurrentes, véase el Problema del C10K y El secreto de 10 millones de conexiones simultáneas .

7voto

Oskar Puntos 1242

Cada dispositivo abre una(s) conexión(es) TCP v4 y/o v6 a través de uno o varios de los siguientes puertos .

Si utiliza un cortafuegos o un nombre de punto de acceso privado para datos celulares, sus dispositivos Apple deben poder conectarse a puertos específicos en hosts específicos:

  • Puerto TCP 5223 para comunicarse con los APN.
  • Puerto TCP 443 o 2197 para enviar notificaciones a los APN.

El puerto TCP 443 se utiliza durante la activación de los dispositivos, y después para la reserva si los dispositivos no pueden alcanzar los APN en el puerto 5223. La conexión en el puerto 443 utiliza un proxy siempre que éste permita que la comunicación pase sin descifrar. Los servidores de APNs utilizan el equilibrio de carga, por lo que sus dispositivos no se conectan siempre a la misma dirección IP pública para recibir notificaciones. Lo mejor es que tu dispositivo acceda a estos puertos en todo el bloque de direcciones 17.0.0.0/8, que está asignado a Apple

En En el lado del servidor de Apple, proxy de conexión de terceros y el usuario final solicita enviar una notificación a otro dispositivo.

APNs hace todo lo posible para entregar sus notificaciones, y para entregarlas con la mejor experiencia de usuario:

  • Los APN gestionan una conexión IP acreditada, cifrada y persistente con el dispositivo del usuario.
  • Los APNs pueden almacenar notificaciones para un dispositivo que está actualmente desconectado. Las APNs reenvían las notificaciones almacenadas cuando el dispositivo se conecta.
  • Los APNs pueden unir notificaciones con el mismo ID de paquete.

En cuanto al cómo, los núcleos de eficiencia del silicio de Apple y la estrecha integración entre la pila de red, el sistema operativo, el diseño del hardware y la gestión de la energía permiten que los dispositivos duerman gran parte del tiempo mientras esperan y no están ocupados con otras tareas locales. Las notificaciones locales también sirven para despertar el dispositivo sin necesidad de ninguna conexión de red.

2voto

Motti Shneor Puntos 130

Aunque las respuestas existentes proporcionan una descripción más o menos precisa de cómo es esta conexión continua, describen la función utilizando términos genéricos (IP, API, TCP+mantenimiento de vida), etc., que pueden ser ciertos, pero pasan por alto toda la cara "Apple" del asunto. Estas respuestas podrían explicar tanto Android como Windows y, en realidad, cualquier plataforma informática que mantenga conexiones receptivas a largo plazo.

El añadido importante que quiero añadir aquí - es que el "Sistema Operativo Base" de Apple - la parte compartida entre MacOS iOS tvOS, watchOS y demás - contiene varios subsistemas y APIs que permiten dicho comportamiento prácticamente "gratis" a cualquier desarrollador de software, siempre que utilicen los subsistemas "recomendados" del sistema operativo, y no meras APIs de red genéricas (como posix, etc.)

La capacidad de mantener una conexión receptiva a largo plazo no sólo es necesaria para los servicios basados en notificaciones (como "FindMy" y otros), sino también para todos los servicios de medios remotos: FaceTime, iTunes, Maps (Navigation) y, en realidad, también para todos sus competidores (Zoom, Viber, Slack y amigos).

Una característica importante que el OP NO mencionó - la capacidad de sobrevivir y renovar la conexión inmediatamente cuando se cambia de red, de pila de red y cuando se usan múltiples pilas de red e instalaciones simultáneamente - es importante también. un iPhone puede cambiar de Celular a WiFi, a Bluetooth e incluso usar los 3 juntos docenas de veces dentro de una sola llamada.

Los mecanismos importantes que hay que aprender son:

  • El marco de SystemConfiguration (para la "Reachability" y la capacidad de no hacer pellizcos para mantener una conexión)
  • CFNetwork Framework - el marco de la Core Foundation que implementa la mayoría de las interfaces de bajo y alto nivel para los servicios de red - donde se implementa todo el acceso a través de "proxy" o "firewall" o el mantenimiento de la conexión a largo plazo
  • NSURLSession - las APIs Swift/Obj-C de nivel superior que permiten a los desarrolladores de aplicaciones mantener dichas conexiones.

Tuve que utilizar los tres cuando desarrollé software de audio/vídeo-conferencia, agentes de seguridad, herramientas de gestión de bases de datos remotas y muchos otros. Siempre me ha maravillado lo fáciles y eficientes que eran las APIs proporcionadas por Apple en comparación con las soluciones que construía para otras plataformas.

Sólo un pequeño ejemplo: Cuando "le dices al SO" que quieres mantener la conexión con un Servidor específico - y ser notificado de los cambios en su "Reachability", el SO lo hace por ti - pero NO dentro de tu propio proceso. Es un servicio del SO. Así que... su aplicación puede ser asesinada, y ser relanzada inmediatamente cuando la conexión sea restablecida. También - si 3 procesos necesitan mantener la conexión a algún dominio o servicio - el SO sólo rastrea ese dominio/servicio UNA VEZ para todos los "oyentes" registrados. lo que también mejora la eficiencia.

Así que - Cuando se conecta el cable de Ethernet dentro o fuera - OS no necesita "encuesta" en la cosa - que mantiene el hardware basado en interrupciones de todos modos. Se puede hacer mucho más eficiente! lo mismo para cuando se pierde la conexión celular.

Por último, te recomiendo que aprendas estos 3 frameworks de Apple y aprendas cómo se hace en esta plataforma.

Un buen comienzo puede ser ver este vídeo de la WWDC 2015 de Apple - Presentación de Network.framework: Una alternativa moderna a los Sockets

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X