2013-05-12 89 views
1

我开始制作多人游戏,但由于我没有经验,我尝试过不同的方式,但有些东西对我来说并不合适。 所以,我真的需要一个关于我应该使用哪种平台/工具/语言/技术的建议。 我必须说我不相信诸如:Photon,AppWrap,Skiller,Gamooga等等。我不认为他们的规模很大,不会太贵,或者他们太大(我不是指大小,我指的是他们有多少东西,我不需要)满足我的需求。构建基于回合的多人游戏服务器

首先,我将描述简化的游戏会话过程。

  1. 三名球员在开始游戏会话
  2. 每个玩家收到的问题,应该在10秒钟内应答。
  3. 当玩家回答时,他应该能够看到任何其他玩家已经给出的答案(如果有的话),并且他应该能够在给出答案时立即看到答案。基本上,任何答案都应该由其他客户实时接收,但只有在我们回答之后(以避免作弊)。如果时间到了,那么没有回答的人将不会收到分数,下一个问题就会发生。
  4. 决定胜利者并进入下一个问题。 N轮结束后进行游戏。

其次,我会解释一些我考虑过的要求。

  • 游戏应该在iOS/Android/Web上运行。这让我别无选择,只能使它基于HTTP。
  • 我寻找了我真正喜欢的Google Cloud Endpoints。它有iOS/Android/JS SDK,Google Cloud Platform有Google BigQuery,还有很多其他很棒的东西。 ,因为我需要实时答案交付我不知道是否适合(有渠道API,但没有客户端SDK的iOS和人们说它不是很好)。
  • 然后我查找Node.js和长轮询(客户端的AFNetworking),但它很难管理。我需要为客户端提供游戏状态更新(并且我需要发送增量)。这样我需要为每个玩家分别跟踪所有更改。当玩家连接时,我应该检查是否有任何改变;如果它立即发送;如果不是,那么听'改变'事件然后发送。在最后的代码看起来很尴尬,很难理解,我不知道如何做正确的。有socket.io应该使服务器端的东西变得更好,但又没有客户端的iOS SDK。

我不知道该从哪里出发。任何帮助将非常感激。

回答

4

基于回合的体系结构实际上并不复杂,因为滞后并不是一个大问题,数据也不会经常发送。

我会创建两个Web服务,一个用于配对,另一个用于处理实际的游戏。

配对只会让队员排队,当比赛足够时,服务会选择一组队员并为他们分配一个sessionID并将队员传递给游戏服务。

对于游戏服务,重要的是要区分可以在客户端和服务上处理的内容。

游戏服务将存储每个sessionID的所有游戏信息,包括客户端。这将允许一个服务轻松管理数百个游戏。当一个玩家回答一个问题时,它会通过sessionID向服务器发送请求。服务器会迭代会话中的客户端并将信息发送给他们。

客户端可以处理隐藏问题直到用户回答。 (如果您担心黑客攻击,您甚至可以加密其他问题信息)。

服务器还会跟踪会话的计时器,当计时器到期时,它会向所有客户端发送响应,并且忽略任何后面的答案。一个圆整数可以存储在会话中,并与sessionID进行通信以区分过去问题的答案。你可以在客户端有一个预测计时器,但服务器需要是计时器的权限以避免作弊。

+0

>您可以在客户端有一个预测计时器,但服务器需要是计时器的权限以避免作弊。但如果一个客户端有70毫秒的延迟,而其他客户端有500毫秒的话。这意味着首先会处于劣势。有什么方法可以解决这个问题,而且不允许作弊吗? – bobby 2013-05-12 16:41:21

+0

没有优势,如果不使用预测,游戏UI可能需要一点时间才能指示会话结束,但服务器在计时器结束后将忽略任何答案。您的互联网可能会非常缓慢,以致您的答案在计时器用完之前可能无法进入,但您必须考虑到某个地方的滞后时间。如果定时器在客户端上,则很容易破解。 – 2013-05-12 17:09:40

+0

啊,对不起,我忘了说。问题的答案是数字。有三名球员,并根据他们的答案每个将获得第一,第二或第三名。如果没有人是正确的,那么第一名会得到那个答案与最接近的答案。如果没有最接近的答案,那么第一名将获得首先回答的玩家。所以,在这种情况下,延迟较小的玩家会占据优势,对吧? – bobby 2013-05-12 20:58:08

1

使用安全的ssl https协议使用您自己的验证令牌来防止作弊者。

客户需要跟踪每个玩家的时间跨度,而不是实际的时间。在每个客户端的轮次结束之后,单个时间跨度被发送到服务器。

想想这样吧。有3个客户端,当他们开始这轮时,所有客户端都在轮询服务器。由于三者可能有不同的网络速度,因此您不知道谁将首先启动。因此,当每个客户端最终收到绿灯时,计时器将启动该设备,该设备上的计时器将在该客户端设备上接收。你等到所有3都回报服务器,并用他们的时间跨度来确定谁赢了这一轮。

这里有一些关于游戏逻辑的话题。这里有些例子。 用户身份和授权。 (Game Center) 游戏数据持久性和存储。 (云数据库,如AWS DynamoDB) 游戏匹配队列。 (AWS SQS)请勿使用悲观并发来尝试使用数据库。 Match Players的通知已准备就绪,可供睡觉的客户使用。 (AWS SNS到APNS到端点(此移动设备)) 轮询或通知下一步移动。 (AWS SQS或SNS)我不会轮询数据库。 这些服务只是示例建议。我不为亚马逊工作,他们是最容易起床和运行,但有更好的服务。

基本上我得到的是你想要比一个基本的托管网站上的传统MySQL数据库更多。与在专用服务器上创建所有基础架构相比,这些云服务中的一些已经变得非常实惠。 也是成倍增加可扩展性。 您可以使用云服务完成上面列出的每月15美元起价。最好的情况是,如果你的想法开始起作用,只需轻轻一切从管理门户切换即可轻松搞定门槛。 这将是一个很好的问题。

相关问题