顺便说一下,这适用于任何大小的游戏,从两个玩家的跳棋游戏到30多个玩家的FPS游戏。
我疯了吗?
在你的问题中有很多需要考虑的事情:
1)分布式主节点 - 谁开始游戏?我在哪里可以找到第一个节点?如果每个人都决定同时关闭他们的P2P客户端会怎样?世界会毁灭吗?
2)分布式规则 - 谁能确认玩家102235中的77号在x,y,z处杀死了一个怪物?我看到了在没有“指挥官”的情况下出现了大量的黑客攻击/作弊问题...
3)延迟 - 客户端何时接收到所有数据?如果互联网断开连接怎么办?或者在局域网游戏中,如果硬盘损坏了,这会让其他人的游戏疯狂吗?
我确实认为P2P的想法很有趣,但是在所有竞争中,我相信我们需要一个“裁判”来处理规则,因为当你与“匿名人士”竞争时,很多人认为“作弊没关系”。
我认为某种形式的网格计算可能是解决问题的方法,但是如果网格中的某些部分掉落或渲染世界和发送结果太慢...那么我们整个游戏都会“滞后”...对于每个人来说都是可怕的游戏...这已经在许多FPS游戏中看到了,有一个主服务器。如果网络协议处理滞后不太好,那么打跑步的人就更难了,或者他们突然出现在你面前向你开枪。
一种昂贵的解决方案可能是拥有“子服务器”(代理游戏服务器),其中您可以将一些数据更接近玩家。我相信这需要您在全球范围内拥有许多服务器农场(就像暴雪公司在WOW中所做的那样),否则您将不得不发明某种智能的“P2P主机”,当带宽足够大并且足够接近时,它将升级自己为“子服务器”(始终从其视角检查滞后...)...现在假设这是可能的...如果该子服务器与全球主游戏循环之间的线路再次中断呢?
哈哈...这可能会继续下去...听起来越来越像互联网的一般问题 :-)
愉快的编码...!
我一直在思考同样的问题。我有一个长期的偏见,认为分布式系统应该是“分布式”的,不需要中央控制器。 MMO或类似游戏的问题在于每个玩家都应该能够看到相同的“世界”。你最终会遇到类似于爱因斯坦相对论和“同时性”的问题 - 你离得越远,你对世界的看法就越不同。
总的来说,解决方案是你必须能够将信息传播到你周围的其他客户端 - 在游戏空间内,而不一定是物理空间 - 快速到足以使所有本地玩家看到更新的同时发生。
我怀疑答案是为每个玩家拥有一个“服务器”或世界模型,而不是将玩家表示为世界服务器中的向量。
我认为这在理论上可能是可行的,但还有很长的路要走。
正如其他帖子中所指出的那样,通过仅保证向附近的其他玩家更新来保持延迟低是可行的。这在分布式游戏中已经做了很多年。
通过让几个节点负责每个数据片段,可以将数据丢失保持在可容忍的水平。
关于信任问题,可以有一个协议,其中一个玩家可以“挑战”另一个玩家以揭示作弊。即挑战者会复制其他玩家计算的某些部分,并要求比较结果。已经有加密协议可以做到这种事情,但我不知道细节或它们是否在实践中可行。
我认为真正的问题在于没有太多理由开发这样的系统。成本高,增加了复杂性,但游戏体验(产品)并没有显着改善。为了可行,节省资金的活动必须节省比其成本更多的资金。
我肯定不是专家,但这听起来对我有点疯狂。根据我的经验,由于带宽和性能的原因,您需要专用的游戏服务器。使用P2P,您将失去这两个东西。在我看来,P2P对于一些事情非常好。其中包括分发文件和研究。但是,这两件事不需要实时数据。如果您拥有某种大规模多人游戏世界,则可以使用P2P来分发游戏文件,甚至可能卸载数量计算。
我会说有可能性,但其中的可能性似乎有限,尽管潜力巨大。