我目前正在开发一个新的游戏项目,该项目将由一个 React Native 前端和一个基于 Lambda 的后端组成。该应用程序需要一些实时功能,例如活动用户记录、地理围栏等。
我在看 Firebase 的实时数据库,它看起来是一个非常优雅的实时数据同步解决方案,但我认为 AWS 没有任何东西与之类似。
对于仅使用 AWS 服务的“无服务器”实时,我能想到的 3 个选项是:
选项 1:基于 WebSocket 的 AWS IoT 消息传递
这个很明显,通过 IoT SDK 的托管 WebSockets 连接。我正在考虑触发 Lambda 以响应入站和出站事件,并仅使用 WebSockets 作为实时层,像通常那样在应用程序客户端上构建自定义处理逻辑。
至少与 Firebase 相比,这样做的缺点是我必须自己处理事件中的数据,这将在 WebSocket 之上添加另一层管理,并且必须使用应用程序商店中的 API 数据层进行标准化.
优点:
- 可扩展的双向实时连接
缺点:
- 仅在应用程序打开时有效
- 消息结构需要实现
- 要管理的多个传输层
选项 2:推送触发的重新获取
另一种选择是将推送通知用作实时触发器,但使用对 API Gateway 的常规 HTTP 请求来实际获取更新的有效负载。
我喜欢这种方法,因为它只坚持一个传输层和应用程序状态的单一事实来源。当应用程序未打开时,它也会触发更新,因为这些是推送通知。
不利的一面是,这是大量的自定义工作,在推送通知与需要获取的数据之间可能存在困难的映射。
优点:
- 即使应用程序关闭,推送通知也能正常工作
- 单一事实来源,传输层
缺点:
- 最定制的解决方案
- 总体上将涉及更多的 HTTP 请求
选项 3:Cognito Sync 这对我来说比较新,我不确定它是否真的可以从服务器连接。
Cognito Sync 提供用户状态同步。跨设备完成离线支持,并且是我将使用的 Cognito SDK 的一部分。这听起来就像我正在寻找的东西,但找不到任何确凿的证据来证明是否可以从 AWS 而不仅仅是从其中一台设备修改或“触发”更新。
优点:
- 提供抽象的实时数据模型
- 连接到 Cognito 用户记录 OOTB
缺点:
- 不确定是否可以从 Lambdas 修改或更新
我想知道是否有人有在 AWS 上作为基于 Lambda 的架构的一部分进行实时操作的经验,以及您是否对什么是最好的进行方式有意见?