我正在开发一个新的游戏项目,包括一个React Native前端和一个基于Lambda的后端 . 该应用程序需要一些实时功能,如活动用户记录,地理围栏等 .
我正在研究Firebase的实时数据库,它看起来像是一个非常优雅的实时数据同步解决方案,但我不认为AWS有任何类似的东西 .
我只能使用AWS服务来考虑“无服务器”实时的3个选项是:
Option 1: AWS IoT Messaging over WebSockets
这一点非常明显,通过IoT SDK实现托管WebSockets连接 . 我正在考虑触发Lambdas以响应入站和出站事件,只使用WebSockets作为实时层,就像通常那样在应用客户端上构建自定义处理逻辑 .
至少与Firebase相比,其缺点是我必须自己处理事件中的数据,这将在WebSockets之上添加另一层管理,并且必须使用应用程序商店中的API数据层进行标准化 . .
优点:
- 可扩展的双向实时连接
缺点:
-
仅在应用程序打开时有效
-
需要实现消息结构
-
要管理的多个传输层
Option 2: Push-triggered re-fetch
另一种选择是使用推送通知作为实时触发器,但使用对API网关的常规HTTP请求来实际获取更新的有效负载 .
我喜欢这种方法,因为它只适用于一个传输层和应用程序状态的单一事实来源 . 当应用程序未打开时,它也会触发更新,因为这些是推送通知 .
缺点是这是很多自定义工作,在推送通知与需要获取的数据之间存在潜在的困难映射 .
优点:
-
推送通知即使在应用关闭时也能正常工作
-
单一的事实来源,传输层
缺点:
-
最自定义的解决方案
-
将涉及更多的HTTP请求
Option 3: Cognito Sync 这对我来说比较新,我不确定它是否可以与服务器实际连接 .
Cognito Sync提供用户状态同步 . 跨设备完成离线支持,是我将要使用的Cognito SDK的一部分 . 这听起来就像我正在寻找的但却无法找到任何确凿的证据,因为它可以修改或“触发”来自AWS的更新,而不仅仅是来自其中一个设备 .
优点:
-
提供抽象的实时数据模型
-
已连接到Cognito用户记录OOTB
缺点:
- 不确定是否可以从Lambdas修改或更新
我想知道是否有人有经验在AWS上实时作为基于Lambda的架构的一部分,如果你对什么是最好的方法有意见?
3 回答
使用不同的数据源(包括数据库搜索和计算)查看AWS AppSync中的部分实时和离线功能 .
我向AWS Support提出了类似的问题,这是他们的回答 .
我向他们提问:
他们的回应:
在研究这个答案时我也发现了这个,看起来很有趣:
https://aws.amazon.com/blogs/database/how-to-build-a-chat-application-with-amazon-elasticache-for-redis/
对该文章的评论也很有趣 .
听起来像AWS Serverless是最适合的选择 .
还想知道:AWS vs Firebase - Is It Even a Fair Fight?