我开始制作多人游戏,但由于我没有经验,我尝试了不同的方式,但对我来说感觉不对。 所以,我真的需要一个关于我应该最好使用哪些平台/工具/语言/技术的建议。 我必须说我不相信像Photon,AppWrap,Skiller,Gamooga等。我不相信他们会扩展得很好,也不会太昂贵,或者它们太大(我不是指大小,我的意思是他们拥有多少我不需要的东西)以满足我的需求。
首先,我将描述简化的游戏会话过程。
其次,我将解释一些我考虑过的要求。
我不知道从哪里开始。任何帮助都将非常感激。
答案 0 :(得分:4)
基于回合制的架构实际上并不太复杂,因为滞后实际上不是一个大问题,并且数据不会不断发送。
我会创建两个网络服务,一个用于配对,另一个用于处理实际游戏。
匹配将简单地排队玩家,当有足够的比赛时,该服务将挑选一组玩家并为他们分配一个sessionID并将玩家传递给游戏服务。
对于游戏服务,区分客户端和服务可以处理的内容非常重要。
游戏服务将存储包括客户在内的每个sessionID的所有游戏信息。这将允许单个服务一次轻松管理数百个游戏。当玩家回答问题时,它会在请求中使用sessionID将其发送给服务器。服务器将迭代会话中的客户端并将信息发送给它们。
客户端可以处理隐藏问题,直到用户回答。 (如果你担心黑客行为,你甚至可以加密其他问题信息。)
服务器还会跟踪会话的计时器,当计时器到期时,它会向所有客户端发送响应,并忽略任何后续的答案。圆整数可以存储在会话中,并与sessionID进行通信,以便将答案区分为过去的问题。你可以在客户端上有一个预测计时器,但服务器需要是计时器的权限,以避免作弊。
答案 1 :(得分:1)
使用您自己的身份验证令牌使用安全的ssl https协议来阻止骗子。
客户需要跟踪每个玩家的时间跨度而不是实际时间。每轮客户端结束后,各个时间跨度将被发送到服务器。
这样想。有3个客户端,所有客户端都在轮询服务器时进行轮询。因为三者可能具有不同的网络速度,所以您不知道谁将首先实际启动。因此,当每个客户端最终接收到绿灯时,则该设备启动定时器,此时该设备上接收该定时器。你等到所有3个人都用他们的时间跨度向服务器报告,以确定谁赢了这一轮。
在游戏的逻辑中存在一些令人担忧的主题。这里有些例子。 用户身份和授权。 (游戏中心) 游戏数据持久性和存储。 (像AWS DynamoDB这样的云数据库) 游戏比赛排队。 (AWS SQS)请勿使用悲观并发对数据库进行此尝试。 匹配播放器的通知已为睡眠客户端做好准备。 (AWS SNS到APNS到端点(此移动设备)) 下一轮移动的轮询或通知。 (AWS SQS或SNS)我不会轮询数据库。 这些服务只是示例推荐。我不为亚马逊工作,他们最容易起床和跑步,但可能有更好的服务。
基本上我得到的是在一些基本托管网站上需要的不仅仅是传统的MySQL数据库。与在专用服务器上自行创建所有基础架构相比,其中一些云服务变得非常实惠。 这也是指数级更具可扩展性。 您可以使用云服务以每月不到15美元的价格开始上面列出的所有操作。最好的办法是,如果您的想法起飞,只需通过管理门户轻弹一下,即可提高阈值。 这将是一个很好的问题。