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