Ios 构建基于回合的多人游戏服务器

Ios 构建基于回合的多人游戏服务器,ios,mobile,multiplayer,high-load,Ios,Mobile,Multiplayer,High Load,我开始制作多人游戏,但由于我没有到期日,我尝试了不同的方法,但我觉得有些不对劲。 所以,我真的需要一个关于我应该最好使用哪些平台/工具/语言/技术的建议。 我必须说,我不相信光子、AppWrap、Skiller、Gamooga和其他东西。我不相信它们的规模会很大,也不会太贵,或者它们对于我的需求来说太大(我不是指尺寸,我是指它们有多少我不需要的东西) 首先,我将描述简化的游戏会话过程 三名球员开始比赛 每位玩家收到一个问题,应在10秒内回答 当玩家回答时,他应该能够看到任何其他玩家已经给出的答案

我开始制作多人游戏,但由于我没有到期日,我尝试了不同的方法,但我觉得有些不对劲。 所以,我真的需要一个关于我应该最好使用哪些平台/工具/语言/技术的建议。 我必须说,我不相信光子、AppWrap、Skiller、Gamooga和其他东西。我不相信它们的规模会很大,也不会太贵,或者它们对于我的需求来说太大(我不是指尺寸,我是指它们有多少我不需要的东西)

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

  • 三名球员开始比赛
  • 每位玩家收到一个问题,应在10秒内回答
  • 当玩家回答时,他应该能够看到任何其他玩家已经给出的答案(如果有的话),并且他应该能够看到任何给出的答案。基本上,任何回答都应该被其他客户实时接收,但只有在我们回答之后(以避免作弊)。若时间到了,那个么任何并没有回答的人都不会得到分数,下一个问题就来了
  • 决定胜利者并进入下一个问题。在N轮后完成游戏会话
  • 其次,我将解释我考虑的几个需求

    • 游戏应该在iOS/Android/Web上运行。这让我别无选择,只能基于HTTP
    • 我寻找谷歌云端点,我非常喜欢它。它有iOS/Android/JS SDK,谷歌云平台有谷歌BigQuery,还有许多其他很棒的东西但是因为我需要实时回答,我不知道这是否合适(有通道API,但没有iOS客户端SDK,人们说它不太好)
    • 然后我寻找Node.js和长轮询(客户端的AFNetworking),但这很难管理。我需要为客户端提供游戏状态更新(并且我需要发送delta)。这样,我需要跟踪每个玩家的所有变化。当玩家连接时,我应该检查是否有任何变化;如果是,请立即发送;如果不是,则侦听“更改”事件,然后发送。最后,代码看起来很难理解,很难理解,我不知道如何使它正确。有socket.io可以让服务器端的情况变得更好,但同样没有用于客户端的iOS SDK

    我不知道从这里到哪里去。任何帮助都将不胜感激。

    基于Turn的体系结构实际上并不太复杂,因为滞后确实不是一个很大的问题,而且数据也不是经常发送的

    我将创建两个web服务,一个用于配对,另一个用于处理实际游戏

    配对只是让玩家排队,当有足够的玩家参加比赛时,服务会挑选一组玩家,给他们分配一个sessionID,并将玩家传递给游戏服务

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

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

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


    服务器还将跟踪会话的计时器,当计时器过期时,它将向所有客户端发送响应,并忽略任何稍后的应答。一个整数可以存储在会话中,并封装在与sessionID的通信中,以便区分过去问题的答案。您可以在客户机上设置一个计时器进行预测,但服务器需要是计时器的权威,以避免作弊。

    基于回合的体系结构实际上并不太复杂,因为延迟确实不是一个大问题,而且数据也不是经常发送的

    我将创建两个web服务,一个用于配对,另一个用于处理实际游戏

    配对只是让玩家排队,当有足够的玩家参加比赛时,服务会挑选一组玩家,给他们分配一个sessionID,并将玩家传递给游戏服务

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

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

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


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

    使用安全ssl https协议,使用您自己的身份验证令牌将作弊者拒之门外

    客户需要跟踪每个玩家的时间跨度,而不是实际时间。在每个客户机上的回合结束后,将各个时间跨度发送到服务器

    这样想吧。共有3个客户端,它们在开始这一轮时都会轮询服务器。因为这三个可能有不同的网络速度,你不知道谁会首先启动。那么什么时候