开头

排行榜几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种排行榜实现方式。

结构

每个排行榜对应一个actor,State使用如下结构:

%% 通用排行榜结构
-record(rank_list, {key         = undefined, %% 排行榜的唯一keysort_list   = [], %% [one_rank{}] 已经排好序的列表ready_list  = [], %% [one_rank{}] 待排序的列表sort_time   = 0 %% 排行榜的刷新间隔
}).-record(one_rank, {user        =   0, %% 玩家idnum         =   0, %% 用于排行榜排序的字段rank        =   0  %% 排名
}).

排序时间间隔

排序是一种消耗性能的操作,因此服务端要尽量避免实时刷新的排行榜。最好是定下每种排行榜的刷新间隔,再用定时器实现定时排序。

实现

  1. 有数据插入排行榜时,插入or更新ready_list里的数据
  2. 执行排序时,对ready_list里的数据进行排序,同时赋值给sort_list

性能提升

  1. 限制排行榜的长度,也是就限制sort_list的长度,提高查找sort_list的性能
  2. 增加1个标志位,记录在刷新间隔时间内,ready_list是否发生过改变,若没有改变,即使到达排序时间也不进行排序
  3. 每次执行排序后,同时产生两个map, 一个以user(玩家id)为key,#one_rank{}为value;另一个以rank(排名)为key,#one_rank{}为value; 以空间换时间,提高查找速度

游戏服务端开发系列

游戏服务端开发-好友系统

游戏服务端开发-排行榜

游戏服务端开发-邮件系统

游戏服务端开发-全局唯一ID

游戏服务端开发-AOI-九宫格法解析

游戏服务端开发-排行榜相关推荐

  1. 游戏服务端开发-AOI-九宫格法解析(附代码)

    1-啥是AOI AOI全称Area Of Interest,中文就是感兴趣的区域,个人理解就是玩家关注的并且可视的地图区域. 在RPG游戏中,玩家角色移动,攻击,放技能等操作都需要向其他玩家广播,但服 ...

  2. 游戏服务端开发-全局唯一ID

    结构 | PlatId (10bit) | ServerId (12bit) | UnixTime(s) (32bit) | IncreaseId (10bit) | | 平台id (10bit) | ...

  3. 游戏服务端开发-好友系统

    开头 好友系统几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种好友系统的具体实现方式. 存储 可直接以user_id为key,存在ETS或序列化后存在Redis等公共安全的内存数据区域 ...

  4. 游戏服务端开发-邮件系统

    开头 邮件系统几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种邮件系统实现方式. 数据库表 tableName: user_mail mail_id title content from ...

  5. 游戏服务端开发之基础概念扫盲篇

    13年毕业后,做了一年多外包web开发,因为受不了在客户现场工作的氛围,愤然辞职.转行做了一名手游服务端开发. 在广州,据我所知,选择java作为服务端开发语言的公司大概有37互娱,百田,银汉,易娱, ...

  6. 百万在线:大型游戏服务端开发

    进入手游时代,服务端技术也在向前演进.现代游戏服务端既要承载数以万计的在线玩家,又要适应快速变化的市场需求,因此,如何设计合适的架构就成了重中之重.服务端技术并不简单,作为服务端新人,全面掌握服务端技 ...

  7. 速游面经(游戏服务端开发工程师)

    一面:9.15,线下面 一面更像HR面,是一个女面试官,应该是HR,不是技术官,问的专业知识也很浅,没有深挖 我们这个这个岗位是需要转语言的,可以接受吗?(转Erlang) 你的GPA挺高的,平时是怎 ...

  8. Java游戏服务端开发系列文章

    已经好久没有更新自己的学习状态.或许是工作太忙吧,生活被工作羁绊,无法抽身.最近因为某些事情的原因,工作上有点充裕的时间来分享自己的一点小小经验.因为毕竟我也是一个混迹职场几年了 虽然天资不咋地,但是 ...

  9. Java游戏服务端开发之开课了

    从今天开始我将会重新的做一个专栏.这个专栏是专门为新手讲解游戏服务端开发的文章系列.同时也是将自己多年的经验做一个系统的分享. 通过这个系列大家可以掌握到一个游戏开发中的一些概率以及在线游戏服务器所包 ...

最新文章

  1. python中文读音ndarray-numpy中的ndarray方法和属性详解
  2. VC++ VS2010 error LNK1123 转换到 COFF 期间失败 怎么办
  3. 【网络通信与信息安全】之深入分析Token、session和cookie的使用场景和区别
  4. 什么样的事才是有意义的
  5. [html] 页面上如何显示特殊字符?
  6. OpenCV可移植图形工具HighGUI实现图像和视频操作
  7. php 控制器 模板,php学习笔记(一)php模板与控制器
  8. mysql 按月和年累加_广西柳州市市场监管局公布市2020年11月(第一批)电梯按需维保试点名单...
  9. 通过Chrome浏览器检测和优化页面
  10. 最全行车记录仪主控芯片及方案排名TOP15、行车记录仪终端品牌厂商代表产品和方案排名TOP50
  11. Python实现本地翻译API
  12. vba,选中带有图片连接的单元格时,自动下载图片
  13. 物联网和边缘部署的5大嵌入式工控机设计要求
  14. SPSS Modeler数据挖掘:回归分析
  15. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例53
  16. Microsoft Office Visio 缺失安装文件的解决方法(附viso安装密钥)
  17. 计算机论文要多少截图,毕业论文可以用截图吗 毕业论文注意事项
  18. Unity Failed to load ‘Sssets/Plugins/xxx.dll with error 找不到指定的模块
  19. 江西有哪些互联网企业推荐(上)?
  20. android动画类

热门文章

  1. pv lv vg代表的意义
  2. 5.6 小蚁共识机制
  3. 谈谈PBOC3.0中使用的国密SM2算法
  4. 本地局域网用wordpress搭建个人网站
  5. 华尔街股神胡立阳:奥运前出逃A股肯定后悔
  6. 宽信app 项目总结
  7. Learning Log:输入一个天数,计算天数包含多少周和剩余的天数
  8. CactiEZ-完美篇
  9. python投票系统_python实时投票系统的课设
  10. 投票助力源码_公众号投票源码_女神来了投票5.2.0