我正在使用 Goole App Engine 构建一个简单的“与随机对手对战”后端。到目前为止,我将每个想要玩的用户添加到数据存储中的“表”中。一旦数据存储区中有超过 1 名玩家,我就可以开始匹配他们。
Schedule Tasks with Cron这项工作看起来很有希望,直到我发现最低分辨率似乎很精细。如果有很多玩家注册,我希望他们能够快速匹配,而不必等待一分钟(最坏的情况)。
我考虑过让 servlet 接收“与随机对手对战”请求 POST 到将进行匹配的任务队列,但我认为这会在从数据存储区读取数据并删除数据时导致大量争用匹配后来自“随机”表的实体?
基本上,我想要一个工作人员来进行匹配,并且我想时不时地向该工作人员发出信号,现在是尝试匹配对手的好时机。
关于这里的正确行动方针有什么建议吗?
最佳答案
您可以通过交易保证独占访问:
接收通过 REST 进行游戏的请求。检查(在事务内)数据库中是否有任何请求。
如果有,则通知两个用户开始播放并从数据库中删除请求(事务性)。
如果没有,则将其添加到数据库中并等待下一个请求。
更新:
或者,您可以通过 pull queue 实现您所需要的。与上面的场景相同,只是代替数据存储,您需要检查拉取队列中是否有任务,如果有则检索,如果没有则创建一个新任务。
关于google-app-engine - Google App Engine - Cron 还是任务队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859665/