一直在阅读一些关于这个主题的文章,出于好奇,在线游戏维护了一个“大厅”系统,列出了游戏;
如何使每个客户端与当前的游戏列表状态保持同步?
我说的是“客户端要求更新游戏列表”而不是事件驱动的术语(游戏状态更改并立即广播它可能的场景:
一个服务器拥有5000个到在线播放器的连接。
它有1000个游戏列表。
客户每秒钟要求更新一次游戏列表。
现在服务器需要遍历所有的游戏列表,并比较每个特定游戏的最后更新时间,然后如果它看到玩家的最后更新较旧,它将发送一个更新。
这意味着它每秒钟都会有(5000*1000=5000000)个迭代!
有什么切实可行的方法可以避免吗?
你已经做过了,可以和我分享一点小费吗?
我一直在考虑要一个缓存。你的解决办法是什么?

最佳答案

首先,每秒500万次的比较不会明显地对现代硬件征税假设一个比较在1GHz的CPU上需要10个周期。那么这将导致CPU负载微乎其微的5%。当然,我们可以很容易地优化它,但是我们还有更重要的事情要做,不是吗?
更可能的瓶颈是网络带宽我真的需要每秒向每个客户端传输大约1000个游戏的数据吗?假设每个游戏有100字节的数据这将相当于一个乐队约1比特为每个球员。
幸运的是,客户不需要知道每一场比赛。一个典型的模式是用户声明他想要哪个游戏(例如按游戏类型),客户端将这个过滤器发送到服务器,服务器只发送匹配的游戏。

关于algorithm - 在线大厅系统-游戏列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2978657/

10-10 01:09
查看更多