¿Cuáles son las mejores prácticas para desarrollar una aplicación de iOS para comunicarse con Node.js y Socket.IO para crear una aplicación en tiempo real?

NSNotifications es una forma muy pública de anunciar que algo sucedió en algún lugar de su aplicación. Muy raramente quieres eso.

Como alguien que desarrolló una aplicación que se comunicó a través de Socket.IO con el back-end de node.js (la aplicación de apuestas recibe probabilidades en tiempo real mientras se juega el juego), puedo darle algunos consejos:
– Usa objetos inmutables. Este es, con mucho, el consejo más importante. Especialmente cuando se trata de comunicación en tiempo real. Cuando espera cambios de alta frecuencia de datos en ciertos / todos los objetos, el estado mutable puede ser una bazuca apuntada a su pie. En este caso, cada controlador de vista que muestra datos en tiempo real debe administrar su propio suscriptor al socket web. RAC ayuda aquí mediante el uso de métodos de mapa / filtro / reducción para masticar sus colecciones json sin procesar en instancias DAO para su aplicación.
– Al transferir cambios de datos a través de sockets web, no envíe solo deltas. Enviar cargas completas. Esto parece un tráfico pesado, pero no lo es. Especialmente cuando gzip está involucrado. El envío de deltas requiere que desarrolle reglas / protocolos personalizados sobre cómo va a formatearlos y procesarlos (qué objetos / atributos se han agregado / actualizado / eliminado). Nuevamente, las instancias DAO ayudan aquí. Si llegaron nuevos datos: deseche los datos antiguos, cree un nuevo conjunto de objetos. Simple como eso. No hay dudas ni piedad para los objetos viejos.
– Valide cada carga útil que se envía y rechazarla si no es válida (mejor hacerlo en el lado del servidor). Si los datos se envían usando json, puede intentar usar json-schema (JSON Schema and Hyper-Schema). También tiene una biblioteca para node.js. Y escribir un esquema para sus datos no es realmente difícil. Este no es un estándar ampliamente aceptado, sin embargo, lo ayudará a mantener su cordura bajo control. Una vez tuve un golpe de pelo cuando la aplicación funcionaría durante un período de tiempo aleatorio y se bloqueaba porque no podía prever que me enviarían algún formato de datos y no estaba listo para esto. Esto también ayuda con las implementaciones: implementar una nueva versión con nuevos datos compatibles es mucho más fácil que lanzar la aplicación iOS mientras que sus clientes lo maldicen por bloquear una aplicación.
– Controle su conectividad como si la vida dependiera de ello. Web-socket no es un protocolo de conexión basado en solicitud / respuesta, por lo que puede saber cuándo sus datos se están volviendo obsoletos (después de no recibir algunos mensajes de latido a través de web-socket). El tiempo real generalmente involucra datos importantes, por lo que es muy importante notificar a su usuario cuando su conexión es débil y / o los datos están desactualizados.

En mi opinión, la solución más limpia desde la perspectiva del desarrollo es un patrón delegado. Con los delegados, tiene un enlace explícito entre el receptor del mensaje y el objeto que puede reaccionar ante él. Es fácil rastrear dónde está el control de su aplicación y qué causa algunas acciones.
La solución opuesta es NSNotification: genera un objeto global, lo arroja a través de toda la aplicación y asume que algo lo atrapará. Creo que es mucho menos determinista y en términos de OOP es como usar variables globales.
KVO es algo intermedio: necesita una conexión entre el observador y el notificador, pero puede ser muy flexible. Por otro lado, no siempre es natural realizar una acción en el evento “valor cambiado”, por lo que no usaría KVO como solución de arquitectura básica para mi aplicación.

More Interesting

¿Cuáles son los accesorios para iPhone más importantes?

¿Cuáles son las experiencias de las personas con el desarrollo de aplicaciones de iPhone usando PhoneGap con respecto al proceso de aprobación en Apple?

Cómo probar mi aplicación IOS durante 3 meses con 30 usuarios sin obtener una licencia de desarrollador empresarial

¿Cómo crecerá el desarrollo de aplicaciones nativas en comparación con el desarrollo de aplicaciones híbridas en los próximos cinco años?

¿Debo usar la API "Iniciar sesión con Facebook" para mi aplicación de mensajería social o un inicio de sesión de correo electrónico personalizado como lo hace Snapchat?

Cómo obtener descargas en mi juego iOS

Si compré una Macbook y comencé a autoaprendizaje Objective-C (a través de recursos web gratuitos y / o libros) y me familiaricé con el entorno XCode, ¿cuánto tiempo pasaría antes de que pudiera producir una aplicación básica para iPhone / iPad?

Cómo encontrar errores en una aplicación (Android, iOS)

¿Dónde puedo hacer capacitación en línea para el desarrollo de aplicaciones iOS?

Estoy lanzando el MVP 1 de una aplicación en unas pocas semanas, y la sugerencia ha sido presentada de que lancemos en Test Flight de Apple para su aplicación iOS. Estoy preocupado por algunas razones. ¿Alguien ha tenido alguna experiencia reciente con él? ¿Alguna idea?

¿Cómo se consigue obtener una aplicación de iPhone desarrollada por un tercero?

¿Cuánto dinero gana una aplicación de iOS?

Cómo agregar un bucle de fondo MP3 en una página creada por Interface Builder

¿Cuál es el ciclo de vida de la aplicación en iOS?

¿Cuál es la diferencia entre Xcode BETA8 y Xcode7?