在线大厅系统 - 游戏列表

时间:2010-06-05 00:55:29

标签: algorithm list system multiplayer

已经阅读了一些关于这个主题的内容,并且出于好奇,网络游戏维持了一个列出游戏的“大厅”系统;
他们如何让每个客户端与当前的游戏列表状态保持同步?

我在“客户端询问游戏列表更新”条款而非事件驱动条款(游戏状态更改并立即广播它< ---不可扩展!)。

可能的场景:
服务器与在线玩家保持5000个连接 它有1000个游戏的清单 客户要求每一秒更新一次游戏列表 现在服务器需要遍历所有游戏列表并比较每个特定游戏的最后更新时间,然后如果它发现玩家的上次更新时间较晚,则会发送更新。
这意味着每一秒它将具有(5000 * 1000 = 5,000,000 迭代

有没有切实可行的方法来避免它? 你有没有这样做,可以与我分享小费?

我一直在考虑拥有缓存。你的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

首先,500万次比较一秒钟不会明显地对现代硬件征税。假设比较在1 GHz Cpu上进行10个周期。那么这将导致CPU负载5%。当然,人们可以很容易地优化它,但我们有更重要的事情要做,不是吗?

更可能的瓶颈是网络带宽。我是否真的需要每秒向每个客户传输大约1000个游戏的数据?我们假设每场比赛有100个字节的数据。这相当于每个玩家约1MBit的带宽。

幸运的是,客户不需要了解每场比赛。一个典型的模式是用户说明他想要的游戏(例如游戏类型),客户端将此过滤器发送到服务器,服务器只发送匹配的游戏。

答案 1 :(得分:1)

您可以反转订单:每当您的游戏列表发生变化时,您都会向所有客户发送更新。

如果你想节省带宽,你应该创建一个小的更新数据包,其中只包含与上次发送的更新不同的信息,并且游戏的int ID很容易。

让所有客户端同步到相同的大厅状态,这也是因为这是您需要做的事情。为什么您在发布公共列表时想要关注不同的时间?