客户端服务器——实现(相对简单的)多用户在线游戏的最佳方式是什么?



我正在尝试创造一款让用户使用手机在线玩的游戏,通过应用程序,类似于Words With Friends或其他"* With Friends"游戏。因为我没有执行这类游戏的经验,所以我不确定最佳做法是什么。我是想要最小化应该在服务器上运行的代码量,还是应该在客户端上运行的代码量?

我的直觉是在服务器端使用JSON文件,它存储当前游戏的游戏状态。然后每次客户端打开时,让它从服务器获取最新的游戏状态,并相应地提示用户。这消除了在服务器上运行任何游戏相关代码的需要,并允许服务器仅仅充当所有参与客户端之间的中间人。

但是,如果我想让服务器足够意识到客户端B和C,当客户端A完成了它的回合,B和C现在可以采取行动?我是否需要在服务器上运行代码来确定这一点,或者我可以让客户端通知服务器,这是/也许是其他客户端轮流的时间?

我意识到这个问题的答案是相对的,或者甚至可能是显而易见的,但我希望找到一些关于这个问题的总体方向/指导,这样我就可以知道从哪个方向开始,并开始思考我的代码/游戏机制的结构。

你可能需要检查现有的开源社交游戏的代码,以了解它们是如何做到这一点的。

如果它真的很简单并且不需要实时(我在电子游戏环境中使用它,而不是硬/软实时系统),那么简单的服务器端REST后端是最佳的,并且可以让您使用JSON作为客户端-服务器通信协议。

消息传播说,客户B和C在A完成了对他们表面上关心的对象的操作后,可以很容易地完成对他们共同参与的对象的多对一关系。

这样:游戏板(让我们假设这像拼字游戏或世界自然基金会)有许多用户,他们将在任何时候对该游戏板执行写入时收到通知。

有更复杂的方法可以做到这一点,但是KISS在我看来

如果我想让服务器足够意识到客户端B和C,当客户端A完成了它的回合,B和C现在可以采取行动?我是否需要在服务器上运行代码来确定这一点,或者我可以让客户端通知服务器,这是/也许是其他客户端轮流的时间?

我不认为AJAX设计可以(正式地)支持服务器->客户端推送,并保证跨浏览器兼容性。因此,客户端必须轮询服务器以检查更新。

但是有一个解决方法。查看这篇(老式的)文章,了解一个绕过这个问题的设计模式,称为Comet。

另外,请查看Comet的维基百科条目。

你必须实现(最少量的)服务器端代码,使此工作

最新更新