Ich arbeite gerade an einem neuen Spielprojekt, das aus einem React Native-Frontend und einem Lambda-basierten Backend bestehen wird. Die App erfordert einige Echtzeitfunktionen wie aktive Benutzerdatensätze, Geofencing usw.
Ich habe mir die Echtzeitdatenbank von Firebase angesehen, die wie eine wirklich elegante Lösung für die Echtzeit-Datensynchronisierung aussieht, aber ich glaube nicht, dass AWS so etwas hat.
Die 3 Optionen, die ich mir für "serverlose" Echtzeit vorstellen könnte, wenn nur AWS-Services verwendet werden, sind:
Option 1: AWS IoT Messaging über WebSockets
Dies ist ziemlich offensichtlich, eine verwaltete WebSockets-Verbindung über das IoT SDK. Ich dachte daran, Lambdas als Reaktion auf eingehende und ausgehende Ereignisse auszulösen und einfach WebSockets als Echtzeitschicht zu verwenden, um wie gewohnt eine benutzerdefinierte Verarbeitungslogik auf dem App-Client zu erstellen.
Der Nachteil, zumindest im Vergleich zu Firebase, ist, dass ich die Daten in den Ereignissen selbst verarbeiten muss, wodurch zusätzlich zu WebSockets eine weitere Verwaltungsebene hinzugefügt und mit der API-Datenschicht in den Stores der Anwendung standardisiert werden muss .
Vorteile:
- Skalierbare bidirektionale Echtzeitverbindung
Nachteile:
- Funktioniert nur, wenn die App geöffnet ist
- Die Nachrichtenstruktur muss implementiert werden
- Mehrere zu verwaltende Transportschichten
Option 2: Push-ausgelöstes erneutes Abrufen
Eine andere Möglichkeit besteht darin, Push-Benachrichtigungen als Echtzeit-Trigger zu verwenden, aber eine reguläre HTTP-Anforderung an API Gateway zu verwenden, um die aktualisierten Nutzdaten tatsächlich abzurufen.
Ich mag diesen Ansatz, weil er nur an einer Transportschicht und einer einzigen Wahrheitsquelle für den Anwendungsstatus haftet. Es werden auch Updates ausgelöst, wenn die App nicht geöffnet ist, da es sich um Push-Benachrichtigungen handelt.
Der Nachteil ist, dass dies eine Menge benutzerdefinierter Arbeit mit möglicherweise schwierigen Zuordnungen zwischen Push-Benachrichtigungen zu den Daten ist, die abgerufen werden müssen.
Vorteile:
- Push-Benachrichtigungen funktionieren auch dann, wenn die App geschlossen ist
- Eine einzige Quelle der Wahrheit, Transportschicht
Nachteile:
- Die individuellste Lösung
- Wird insgesamt viel mehr HTTP-Anfragen beinhalten
Option 3: Cognito Sync Dies ist für mich neuer und ich bin nicht sicher, ob es tatsächlich vom Server aus angeschlossen werden kann.
Cognito Sync bietet die Synchronisierung des Benutzerstatus. Geräteübergreifend mit Offline-Unterstützung und Teil des Cognito SDK, das ich sowieso verwenden werde. Es klingt wie das, wonach ich suche, konnte aber keine schlüssigen Beweise dafür finden, ob es möglich ist, Updates von AWS und nicht nur von einem der Geräte zu ändern oder "auszulösen".
Vorteile:
- Bietet ein abstrahiertes Echtzeitdatenmodell
- Verbunden mit Cognito-Benutzerdatensätzen OOTB
Nachteile:
- Nicht sicher, ob von Lambdas aus geändert oder aktualisiert werden kann
Ich frage mich, ob jemand Erfahrung mit AWS in Echtzeit als Teil einer Lambda-basierten Architektur hat und ob Sie eine Meinung dazu haben, wie Sie am besten vorgehen können.