我正在使用Goole App Engine构建一个简单的“对抗随机对手”后端。到目前为止,我正在将每个想要播放的用户添加到数据存储区中的“表”中。只要数据存储区中有多个玩家,我就可以开始匹配它们了。
Schedule Tasks with Cron对这项工作看起来很有希望,直到我看到最低分辨率似乎是微不足道的。如果有很多玩家注册,我希望他们能够快速匹配,而不必等待一分钟(最糟糕的情况)。
我考虑让servlet重新“对抗随机对手”请求POST到一个可以进行匹配的任务队列,但我认为这会在从数据存储区读取并删除时会导致很多争用匹配后从“随机”表中输入?
基本上我想要一个能够进行匹配的工作人员,我想不时地告诉这个工人现在是尝试匹配对手的好时机。
有关什么是正确的行动方案的任何建议?
答案 0 :(得分:2)
您可以保证通过交易进行独家访问:
收到通过REST播放的请求。检查(在事务中)数据库中是否有任何请求。
如果有,请通知两个用户从数据库开始播放和删除请求(transactionaly)。
如果没有,请将其添加到数据库并等待下一个请求。
<强>更新强>
另外,您可以通过pull queue实现所需。与上面相同的情况,只是代替数据存储区,您可以检查拉取队列中是否有任务,检索是否存在或创建新任务(如果没有)。