На даний момент я працюю над новим ігровим проектом, який складатиметься з інтерфейсу React Native та інтерфейсу на основі лямбди. Додаток вимагає деяких функцій у режимі реального часу, таких як активні записи користувачів, геозонування тощо.
Я розглядав реальну базу даних Firebase, яка виглядає справді елегантним рішенням для синхронізації даних у режимі реального часу, але я не думаю, що AWS має щось подібне.
Три варіанти, які я міг би придумати для "безсерверного" реального часу з використанням лише служб AWS:
Варіант 1: Обмін повідомленнями AWS IoT через WebSockets
Це цілком очевидно, кероване з’єднання WebSockets через IoT SDK. Я думав запустити Lambdas у відповідь на вхідні та вихідні події, а просто використовувати WebSockets як рівень реального часу, будуючи власну логіку обробки на клієнті програми, як зазвичай.
Недоліком цього, принаймні порівняно з Firebase, є те, що мені доведеться обробляти дані в подіях самостійно, що додасть ще один рівень управління поверх WebSockets, і мені доведеться стандартизувати рівень даних API у магазинах програми. .
Плюси:
- Масштабоване двонаправлене з’єднання в режимі реального часу
Мінуси:
- Працює лише тоді, коли програма відкрита
- Потрібно впровадити структуру повідомлень
- Кілька транспортних шарів, якими потрібно керувати
Варіант 2: Повторне отримання за допомогою натискання
Інший варіант - використовувати push-сповіщення як тригери в реальному часі, але використовувати звичайний HTTP-запит до шлюзу API, щоб фактично отримати оновлене корисне навантаження.
Мені подобається такий підхід, оскільки він дотримується лише одного транспортного рівня та єдиного джерела істинності для стану програми. Він також запускатиме оновлення, коли програма не буде відкрита, оскільки це push-сповіщення.
Недоліком є те, що це багато настроюваної роботи з потенційно складними зіставленнями між push-сповіщеннями до даних, які потрібно отримати.
Плюси:
- Push-сповіщення працюють, навіть коли додаток закрито
- Єдине джерело істини, транспортний рівень
Мінуси:
- Найбільш нестандартне рішення
- В цілому буде задіяно набагато більше запитів HTTP
Варіант 3: Синхронізація Cognito Це для мене новіше, і я не впевнений, чи насправді його можна пов’язати із сервером.
Cognito Sync пропонує синхронізацію стану користувача. на всіх пристроях із підтримкою в автономному режимі та є частиною Cognito SDK, який я все одно буду використовувати. Це звучить як саме те, що я шукаю, але не зміг знайти переконливих доказів того, чи можна змінити або "активувати" оновлення з AWS, а не лише з одного з пристроїв.
Плюси:
- Забезпечує абстраговану модель даних у режимі реального часу
- Підключено до записів користувачів Cognito OOTB
Мінуси:
- Не впевнений, чи можна змінити чи оновити з Lambdas
Цікаво, чи є у кого-небудь досвід роботи в режимі реального часу на AWS як частині архітектури, заснованої на лямбді, і чи є у вас думка щодо того, який найкращий спосіб продовжити?