我正在尝试使用 GAE 后端实现 2 人回合制游戏。这个游戏需要的第一件事是一个非常简单的匹配系统,操作如下:
- 用户 A 向后端请求匹配。后端告诉他稍后再回来
- 用户 B 向后端请求匹配。他将与A相匹配。
- 用户 C 向后端请求匹配。后端告诉他稍后再回来
- 用户 D 向后端请求匹配。他将与C相匹配。
- 等等...
(编辑:我的假设是,如果我能弄清楚这一点,大多数其他操作 ia 回合制游戏都可以使用相同的实现)
这可以在Apple Gamecenter和Xbox Live中很容易地完成,但是我宁愿在像 GAE 这样的开放且独立于平台的后端上实现它。经过一些研究,我发现了 GAE 实施的以下选项:
- 使用内存缓存。但是,不能保证 memcache 在不同的实例之间是同步的。我做了一些测试,实际上可以看到由于内存缓存错误同步而导致匹配请求消失。
- 使用分片计数器强化内存缓存。这并不总能解决多实例问题,并且 mayabe 会导致高内存缓存配额使用率。
- 将内存缓存与比较和设置一起使用。用作互斥体时不能解决多实例问题。
- 任务队列。我不知道如何使用这些,但有人提到作为可能的解决方案。但是,我担心排队会很快吃掉我的 GAE 配额。
- 推队列。和上面一样。
- 交易。和上面一样。也可能非常昂贵。
- 渠道。和上面一样。也可能非常昂贵。
匹配是网络游戏中非常基础的操作,我不可能是第一个遇到这种情况的人。因此我的问题是:
- 您知道任何安全的配对机制吗?
- 如果存在多个解决方案,哪个是最便宜的(就 GAE 配额使用而言)解决方案?