棋牌游戏定时器模块设计

最近在研究棋牌游戏,想在今年上半年出一款本地麻将。github上down了几个麻将的模块走读了下,基本上可以做麻将的AI,算听,记番功能,用JNA调用了下,很nice。
算法搞定以后就是后台了,之前也接触过几个开源的游戏后台,这些开源后台其实就是搭个架子,里面的模块都没有,还需要自己垒。
我列了下棋牌后台的两个最重要的模块:
1.定时服务器
棋牌游戏里有太多的定时任务了,特别是出牌倒计时,有1000个桌子就要有1000个定时任务并发。

2.网络连接管理
上线了,掉线了,离线了,换终端了,需要重连,这些都需要专门的模块管理

当然还有数据库、异步调度、消息队列、线程池、序列化等等这些基础模块

今天只说定时器模块
现在一台服务器并发个几万桌游戏都很正常,定时任务的并发至少在几万以上。 我们广电少点吧,好歹也要准备个几千个并发能力。
很明显单纯的多线程肯定是不行的。
搜了下,都不合适,总觉得不够优化,那只能自己设计了

特点分析
1.并发高(这是肯定要concurrent并行容器了)
2.任务执行有先后次序(有点像队列)
3.只执行现在时刻的到期任务(貌似读区间和写区间是分开的,不用锁了?)
4.我理想的定时器要能记录任何时间点的任务

解析
开始想用hashmap,但是在读的时候,需要对任务执行时刻排序,为什么不能在写任务的时候就排好呢?数据结构肯定是队列无疑。
程序应该是这样的,a一条任务队列,很多游戏线程会往队列里按时间顺序插入任务。b定时服务主线程1ms轮询一次队列中第一个任务,如果到期,取出执行。
用什么数据结构呢ConcurrentSkipList ,插入拥有O(logN)复杂度,删除复杂度是O(1)可以说相当快了。

优化
1.时间轴分段?棋牌大多数倒计时都是在当前时刻15秒时(看你的游戏规则),插入时间点过于集中。
2.10条或者100条list做负载均衡? 复杂度-1和-2 。但是主线程轮询的时候需要对10个或100个数据进行排序,反而更差。

3.既然棋牌大多数都是1分钟以内的定时,我在1分钟以内的定时用轮盘实现,数量为6000,每个时间片是10ms。每个时间片使用ConcurrentHashMap实现并行插入,插入复杂度是O(1),读取复杂度也是O(1)。 当然一分钟以外的定时任务,我们可以用ConcurrentSkipList记录,并额外需要一个线程,不断把SkipList中的定时任务转移到1分钟轮盘中。
虽然多了一个线程,但是无论是空间还是时间都是非常优化的。nice!!

4.“特点3”读区间和写区间是分开的,ConcurrentSkipList第一个元素的读取复杂度是O(1)
5.(2019/02/19)优化“3”,需要多一条线程,细想还是不对,第一条线程在读取时间轮盘以后,再读取一下 ConcurrentSkipList的任务就好了,没必要两个线程。真实优化无止境啊 ,fuck!!!

总结
1 一分钟以内的定时,用6000个ConcurrentHashMap组成一个时间轮盘,每个ConcurrentHashMap存储10ms时间段的定时任务。
2 一分钟之外的定时,用ConcurrentSkipList统一存储。
3 thread1 定时轮询当前时间片的ConcurrentHashMap,并发送具体任务给对应的worker执行。然后再读取ConcurrentSkipList,并发送具体任务给对应的worker执行。
4 thread1 千万不要阻塞。

棋牌游戏定时器模块设计相关推荐

  1. 手机棋牌游戏开发的流程是怎样的?

    最近几年,随着网络游戏的兴起,棋牌手游开发也越来越受欢迎,在国内,几乎随处可见从事手游和手游的公司.不过,虽然公司和产品很多,但效果也不一样,区别就在于,他们能不能掌握好这款游戏的关键.那么,在手机上 ...

  2. 棋牌游戏开发UI设计师如何打造受玩家欢迎的界面

    棋牌游戏由于其简单的玩法规则,深受群众喜欢,但这只是棋牌游戏开发侧重的一方面,如果玩家连最开始的下载试玩欲望都没有,又如何了解你的游戏规则呢,因此棋牌游戏开发界面设计,也是影响其是否能够受大众认可的重 ...

  3. 棋牌游戏服务器架构: 详细设计(二) 应用层设计

    这里的应用层,指的是CenterServer.LogonServer.LogServer.RoomServer等几个服务器,另外还包括游戏模块的设计.不过游戏模块和前4个服务器的设计很不相同.这里先说 ...

  4. 棋牌游戏服务端开发和设计-苏劲-专题视频课程

    棋牌游戏服务端开发和设计-279人已学习 课程介绍         本门课程讲解棋牌游戏服务端的架构.数据库的设计.数据库异步存储.帐号管理.房间管理等棋牌游戏服务端的核心技术,有意向从事棋牌研发的同 ...

  5. HTML5期末大作业:棋牌游戏网站设计——棋牌游戏(8页) HTML+CSS+JavaScript web大作业 静态网页

    HTML5期末大作业:棋牌游戏网站设计--棋牌游戏(8页) HTML+CSS+JavaScript web大作业 静态网页 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物 ...

  6. 基于滴滴云的棋牌游戏服务端架构设计

    现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS.CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架 ...

  7. 游戏微服务架构设计:棋牌游戏

    棋牌游戏怎么做分布式? Gate 这个连接用来做负载均衡,只是为了获取连接服的连接地址用,客户端连接后,拿到连接服的IP和端口就断开.其中,如何选择连接服的策略可以是随机.轮询.加权重等. Conne ...

  8. 【棋牌游戏】JAVA服务器设计与开发(一)

    ####开篇语 大概在16年时候,新型房卡模式打开棋牌游戏新里程,整个棋牌行业迅速改变模式,出现近两三年激烈的竞争景象,据统计全国大大小小棋牌游戏公司,专职棋牌公司近两万多家,这都不算后起大大小小游戏 ...

  9. 棋牌游戏服务器架构: 总体设计

    首先要说明的是, 这个棋牌游戏的服务器架构参考了网狐棋牌的架构.网狐棋牌最令人印象深刻的是其稳定性和高网络负载.它的一份压力测试报告上指出:一台双核r的INTEL Xeon 2.8CPU加上2G内存和 ...

  10. 网狐棋牌游戏平台服务器架构设计分析

    调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...

最新文章

  1. 【技术综述】一文道尽R-CNN系列目标检测
  2. android系统中sd卡各文件夹功能详解 guessword,AndroidStudio LiveTemplate函数说明
  3. Struts2中OGNL,valueStack,stackContext的学习
  4. Controls 属性与继承 TShape 类的小练习
  5. Android魔法(第二弹)——一步步实现淹没、展开效果
  6. Android开发之ApiCloud模块开发的注意事项
  7. 计算机丢失wpcap.dll会影响什么,Win7系统提示wpcap.dll丢失如何解决?
  8. 读书笔记——数据库系统概论
  9. Microsoft.NET Pet Shop 4.0各个模块之间的联系
  10. Sql2Bean代码生成器
  11. 魔兽世界 助手 无法连接服务器,魔兽世界助手8.1无法登陆
  12. 《数字信号处理》系统函数的频率响应、零极点和稳定性的实现
  13. Cesium开发基础获——取鼠标点击的经纬度(lon、lat)、高度(height)、相机的视角(heading、pitch、roll)
  14. 基于python的opencv计算机视觉基础知识及例程代码【视觉入门看这一篇就够了】
  15. 动态规划:HDU1248-钱币兑换问题
  16. 共享经济思考:标准化与个性化如何融合
  17. moment.js 计算当前一周、一月对应日期
  18. 前端学习-品优购实践
  19. 原神抽卡模拟器(java简易版)
  20. 清朝盛衰的六个时间点!

热门文章

  1. 梦幻西游服务器哪个区人气最多,梦幻西游大区火爆程度排名 北京一区垄断前三...
  2. Java菜鸟学习编写第一个java程序HelloWorld
  3. 在线答题小程序一站式开发(现源码)
  4. 运筹学笔记 网络计划
  5. Go游戏框架初探《一》
  6. linux中telnet命令安装包,linux的telnet命令安装
  7. 状态压缩DP 图文详解(一)
  8. unity安装后 启动失败_Unity3D插件安装常见问题说明
  9. linux视频补帧,SVP补帧软件最新版-SVP补帧软件免费版-QQ下载站
  10. freewitch测试信息-cdr