firebase - 如何通过应用引擎监控firestore并同时执行多个游戏?
问题描述
如何通过应用引擎或其他 Google 云服务同时监控 Firestore 并执行多个游戏?(由于 Cloud Functions 的 9 分钟限制,我无法使用 Cloud Functions):((
我参考官方文档写了代码来快照Firestore中的集合路径。代码示例如下:
def hello_firestore(last_match_key):
print('%s start!!!' % last_match_key)
# TODO execute game. For about 13 minutes
asyncio.run(Game_main(last_match_key).waitingForAllMatch())
print('%s done!' % last_match_key)
# onsnapshot
def CustomizeOnSnap(col_snapshot, changes, read_time):
for change in changes:
if change.type.name == 'ADDED':
last_match_key = u'{}'.format(change.document.id)
return hello_firestore(last_match_key)
else:
break
if __name__ == '__main__':
db.collection(u"PlayAndScore").on_snapshot(CustomizeOnSnap)
对于这段代码,我可以成功地使用 onsnapshot 来执行我的游戏的功能。
但是由于第一局a还在执行,结果我一次只能运行一个游戏,不能同时执行多组(第二局可以监控,但不会自动开始第二局直到第一场比赛结束)。如何解决我不能同时玩多个游戏的问题?
有人可以给我一些解决这个问题的方法吗?困扰我两个月了。
解决方案
我相信您可以使用Cloud Tasks而不是 Cloud Functions。您可以同时运行多个 Cloud Tasks,如果您使用手动扩展,则可以将手动扩展的等待时间设置为最长 24 小时。
根据您的用例,另一种可行的方法是在 App Engine 上使用流量拆分。
一个可能有点远的想法是从主代码中为您想要的每个游戏生成端点。就像基本的 Flask 示例一样:
@app.route('/greeting/<name>')
def give_greeting(name):
return 'Hello, {0}!'.format(name)
这样,您将为每个用户运行单独的“游戏”,如果这正是您想要实现的目标。
但是,根据您对用例的描述,我会选择 Cloud Tasks。
推荐阅读
- javascript - 在全日历中按日切换到周或月的双重输入
- email - Flask Mail - 设置一些短语的样式
- c# - C# [regex] 修剪特定单词前的空格
- c# - Oracle.ManagedDataAccess.Client 引发 NullReferenceException
- python-3.x - 子进程 STDOUT 不活动
- matlab - 用 subsasgn 调用 Matlab 的 memmapfile
- python - Jupyter Notebook - 属性错误:“模块”对象没有属性“F_OK”
- chart.js - AmCharts:带有子类别的聚集条形图
- android - 在 build.gradle 文件中混合 android 依赖版本错误消息,但是找不到不同的依赖项
- spring - Spring集成消息丢失场景