¿Cuál es el flujo básico de mensajes en iMessage? ¿Existe un “interruptor” central y una base de datos centralizada con todos los usuarios de iPhone?

Si bien Apple normalmente no revela su infraestructura interna, parece que iMessage es esencialmente un servicio centralizado. “Cambiar” probablemente no sea la palabra más precisa aquí: espero que sea más un servidor (o un grupo de servidores, para ser justos).

iMessage, como FaceTime definitivamente se registra en estos servidores. Así es como los dispositivos iOS saben si un usuario está disponible para iMessage o no, particularmente importante en el caso de los números de teléfono para determinar si SMS o iMessage deben usarse desde un iPhone. Cuando redacta o envía un nuevo mensaje, la aplicación Mensajes busca la dirección que está utilizando en estos servidores de iMessage para determinar si el destinatario es accesible a través de iMessage o no. De hecho, puede ver este efecto al ingresar un número de teléfono para un nuevo iMessage en un iPhone … Comenzará en modo “Mensaje de texto” con un botón verde “Enviar” y las palabras “Mensaje de texto” sombreadas en la ventana de redacción. Ingrese una dirección de iMessage y verá en un par de segundos que la pantalla cambia para reflejar que está enviando un iMessage, con un botón azul “Enviar” y las palabras “iMessage” sombreadas en el fondo de la ventana de redacción.

Los iMessages también se envían entre dispositivos a través de los servidores iMessage de Apple. Esto se puede demostrar mediante un rastreo de paquetes, pero también se puede deducir mediante una lógica simple:

  • iMessage funciona detrás de la mayoría de los firewalls domésticos e incluso algunos firewalls corporativos, lo que sería un problema para la mensajería confiable de igual a igual para un servicio que no mantiene una conexión persistente a un servidor en algún lugar. Hay formas técnicas de solucionar esto, por supuesto, pero pueden ser complejas y no puedo ver que Apple se tome la molestia de diseñar esto cuando una entrega enrutada por el servidor es mucho más simple y confiable.
  • Las conversaciones de iMessage que usan direcciones de correo electrónico se sincronizan con todos los dispositivos que comparten la misma dirección de iMessage. Una vez más, esto sería técnicamente posible utilizando comunicaciones entre pares, pero requeriría que el dispositivo iOS remitente conozca y actualice simultáneamente y directamente todos los demás dispositivos iOS que comparten la misma cuenta. Un método enrutado por el servidor es una forma mucho más eficiente de manejar esto.
  • Apple probablemente quiera poder rastrear métricas para el servicio iMessage. Esto sería difícil, si no imposible, de hacer con un sistema de comunicaciones entre pares.

También tenga en cuenta que Apple ha tenido un sistema de notificación de inserción desde el iPhone muy original, en ese momento solo se usaba para MobileMe y Yahoo Mail, pero la tecnología existía incluso en aquel entonces. iOS 3 lanzado en 2009 puso esta tecnología a disposición de desarrolladores externos que podrían implementar sus propios servidores de notificaciones push, pero estas notificaciones todavía se enrutaron a través de la red de Apple desde los propios servidores de notificaciones de los desarrolladores. Es muy probable que iMessage se base en la tecnología de notificación push existente de Apple.

Por otro lado, vale la pena señalar que FaceTime establece una conexión directa entre dos dispositivos iOS, pero esto es casi necesario ya que estamos hablando de datos de video en tiempo real y no de mensajes individuales. Sin embargo, incluso con FaceTime, los servidores de Apple se utilizan para intercambiar los datos necesarios para establecer la sesión directa, y los paquetes que viajan de un lado a otro para realizar y configurar esta videollamada directa son más grandes de lo que sería un iMessage individual, lo que significa que sería una completa pérdida de tiempo para intentar hacer lo mismo con iMessage.