几乎每个网络游戏都有排行榜的功能,我们的游戏也有,而目前我们游戏的排行榜由我负责实现,老大说一定要注意效率。
这里以战力排行榜为例子,因为战力是最容易变化的,玩家穿装备和脱装备,玩家战斗力时时刻刻在变化着,而且战力排行榜的刷新时间间隔比较短。
我的做法是开服时先把全服玩家的数据(玩家id,昵称,战斗力)load进来,然后我自己维护这份数据,保证它是最新的。然后我用list1保存当前排行榜的数据,我排行榜的人数是100人的话,我会保存100人+替补人数。复制一份list1数据保存到list2里面,list_all保存全服玩家数据,因为游戏里玩家删号、被封禁,是要从榜单删除的,下面的人顶上去,等到下一次刷新时间才重新排名,所以会有替补的概念。当玩家战力变化时,我会先用它来和list1的最后一名比较,如果大于的话,那么就更新list2的数据。如果小于,这个玩家如果在排行榜上,把他从list2删除。下一次刷新时间,判断list2的人数是否足够。如果足够,直接排序,否则就用list_all的数据来排序,然后更新list1,list2即可。注意这里保证每次数据更新都会更新list_all里面的数据。
如果你有更好的做法,欢迎和我交流讨论,我们游戏(服务器)用erlang实现。
网友评论