当前位置:  开发笔记 > 运维 > 正文

多人UDP联网策略,需要建议

如何解决《多人UDP联网策略,需要建议》经验,为你挑选了0个好方法。

我正在尝试为实时3D游戏创建一个C++插件.虽然我相信对UDP的理论,它是如何工作的,它的优点和缺点有一个坚定的把握,但我关注的主要问题是性能,可扩展性和可能的​​统计数据.我知道,在UDP甚至TCP方面,我可能只知道海洋的价值下降.

问题:

某种情况下,典型的专用服务器在任何时候都能够应对多少玩家.

现在为场景......

让我们假设我们有一个MMORPG游戏,所有玩家都可以在"游戏世界"的任何地方.每个人都向同一个服务器/服务器中心发送和接收数据,因为每个人都必须能够......在他们的路径最终交叉时看到并与其他人互动.这是一个实时的第一人称游戏,所以玩家的位置必须是最新的,非常及时.

让我们说我们有1000名(甚至10000名)在线玩家......

这里需要做三件事:

    每个玩家通过UDP将其数据流式传输到游戏服务器,例如每秒14次发送.简而言之,这些数据包括每个玩家的身份,地点和内容.发送的数据已经过标准化,并针对大小和速度进行了优化,以鼓励最小的带宽使用.

    服务器每秒14次接收这些分组多达1000个(用于演示目的的非虚构图),因此每秒处理14 000个分组.该处理阶段通常涉及更新中央存储器数据结构,其中玩家旧的x,y,z位置数据将用他的新位置和时间戳更新.服务器上的此数据结构包含整个游戏世界中所有玩家的所有数据.

    服务器(可能是一个单独的线程,甚至可能是一个单独的机器)现在需要将数据包广播给所有其他玩家,因此他们可以更新他们的屏幕以显示地图上的其他玩家.这也是每秒发生14次.(其中14可能通常是动态数字,根据使用的CPU容量,繁忙的CPU,较少的帧速率而反之亦然).

重要的是:对于玩家X,只有他位置的视觉范围内的其他玩家的数据被发送到相应的玩家.因此,如果玩家Y在2英里外,他的数据需要发送到X,但如果玩家Z在行星的另一边,他的数据不会被分派到X作为节省带宽的尝试.这当然涉及更多的处理,因为必须使用最有效的索引解决方案来迭代和过滤数据.

现在我担心的是,从客户端机器发送数据包,将其送入服务器RAM,稍微处理更新数据,并选择性地将信息广播给其他玩家,需要时间.这意味着,服务器能够处理某个阈值,是的,取决于我的实现的有效性,所用硬件的速度和能力,当然还有其他外部因素,如互联网速度,交通和nr.太阳耀斑每秒击中地球......开个玩笑.

我试图从其他人那里了解,他们已经完成了这个过程,陷阱是什么,以及在创建多人插件时我可以期待的典型表现.

我可以很容易地说:"我想要同时为同一台服务器上的10000个人提供服务",你可能会说:"每个服务器100个是更现实和可能的数字."

所以我知道我可能需要提出一个多服务器/云计算中心来处理我的数千个请求和调度,在多台机器上分配处理负载.所以我可能有一些机器只处理接收数据,一个巨大的中央盒子,就像所有接收和调度机器以某种方式共享的内存数据库,当然还有一系列调度机器.

显然,存在技术限制,我真的不知道会发生什么以及它们是什么.并且在问题上抛出额外的CPU和服务器盒将不会成功地解决问题,因为机器之间的更多相互通信也将使该过程减慢一些.我认为你投入的CPU越多,可能会降低效率甚至在某个阈值时反转CPU工作效率.

可以而且我应该考虑P2P(Peer To Peer)进行多人游戏!

我是否现实地说我能够在任何时候满足2500名玩家的需求?

几年后可以扩展到10000名玩家吗?

我知道这个问题很长,所以请接受我真诚的道歉.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有