Estoy trabajando en un nuevo proyecto de juego en este momento que consistirá en un front-end React Native y un back-end basado en Lambda. La aplicación requiere algunas funciones en tiempo real, como registros de usuarios activos, geofencing, etc.
Estaba viendo la base de datos en tiempo real de Firebase que parece una solución realmente elegante para la sincronización de datos en tiempo real, pero no creo que AWS tenga nada parecido.
Las 3 opciones que se me ocurren para "sin servidor" en tiempo real usando solo servicios de AWS son:
Opción 1: mensajería de AWS IoT a través de WebSockets
Este es bastante obvio, una conexión WebSockets administrada a través del SDK de IoT. Estaba pensando en activar Lambdas en respuesta a eventos entrantes y salientes y simplemente usar WebSockets como capa en tiempo real, creando una lógica de manejo personalizada en el cliente de la aplicación como lo haría normalmente.
La desventaja de esto, al menos en comparación con Firebase, es que tendré que manejar los datos en los eventos yo mismo, lo que agregará otra capa de administración además de WebSockets y tendrá que estandarizarse con la capa de datos API en las tiendas de la aplicación. .
Pros:
- Conexión bidireccional escalable en tiempo real
Contras:
- Solo funciona cuando la aplicación está abierta
- La estructura del mensaje debe implementarse
- Varias capas de transporte para gestionar
Opción 2: Recuperación activada por push
Otra opción es utilizar notificaciones push como activadores en tiempo real, pero utilizar una solicitud HTTP regular a API Gateway para obtener la carga útil actualizada.
Me gusta este enfoque porque se adhiere a una sola capa de transporte y una única fuente de verdad para el estado de la aplicación. También activará actualizaciones cuando la aplicación no esté abierta, ya que son notificaciones automáticas.
La desventaja es que se trata de una gran cantidad de trabajo personalizado con asignaciones potencialmente difíciles entre las notificaciones push y los datos que deben buscarse.
Pros:
- Las notificaciones push funcionan incluso cuando la aplicación está cerrada
- Fuente única de verdad, capa de transporte
Contras:
- La solución más personalizada
- Implicará muchas más solicitudes HTTP en general
Opción 3: Cognito Sync Esto es más nuevo para mí y no estoy seguro de si realmente se puede conectar desde el servidor.
Cognito Sync ofrece sincronización del estado del usuario. en todos los dispositivos con soporte sin conexión y es parte del SDK de Cognito que usaré de todos modos. Suena como lo que estoy buscando, pero no pude encontrar ninguna evidencia concluyente sobre si es posible modificar o "activar" actualizaciones de AWS y no solo de uno de los dispositivos.
Pros:
- Proporciona un modelo de datos abstraído en tiempo real
- Conectado a registros de usuario de Cognito OOTB
Contras:
- No estoy seguro si se puede modificar o actualizar desde Lambdas
Me pregunto si alguien tiene experiencia haciendo tiempo real en AWS como parte de una arquitectura basada en Lambda y si tiene una opinión sobre cuál es la mejor manera de proceder.
Respuestas:
Le hice una pregunta similar a AWS Support, y esta fue su respuesta.
Mi pregunta para ellos:
Su respuesta:
Además, mientras investigaba esta respuesta, también encontré esto, parece interesante:
https://aws.amazon.com/blogs/database/how-to-build-a-chat-application-with-amazon-elasticache-for-redis/
Los comentarios a ese artículo también son interesantes.
fuente
Consulte AWS AppSync para conocer algunas de estas funciones en tiempo real y sin conexión utilizando diferentes fuentes de datos, incluida la búsqueda y el cálculo de bases de datos.
fuente
AWS Amplify es la respuesta moderna de AWS a Firebase.
fuente
Parece que AWS Serverless es la alternativa más adecuada.
También me pregunto: AWS vs Firebase: ¿Es incluso una pelea justa?
fuente