[推荐] 游戏服务器中实时显示的全服排名是怎么实现的? [问题点数:400分]

Bbs4
本版专家分:1005
版主
结帖率 97.74%
Bbs10
本版专家分:138845
版主
Blank
进士 2017年 总版技术专家分年内排行榜第六
Blank
金牌 2018年1月 总版技术专家分月排行榜第一
2016年12月 总版技术专家分月排行榜第一
2016年11月 总版技术专家分月排行榜第一
2016年10月 总版技术专家分月排行榜第一
Blank
优秀版主 2016年10月优秀大版主
2016年8月优秀大版主
Blank
银牌 2018年5月 总版技术专家分月排行榜第二
2017年12月 总版技术专家分月排行榜第二
2016年9月 总版技术专家分月排行榜第二
Bbs12
本版专家分:373022
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第七
Bbs6
本版专家分:6666
Blank
红花 2018年8月 Delphi大版内专家分月排行榜第一
2018年7月 Delphi大版内专家分月排行榜第一
2018年4月 Delphi大版内专家分月排行榜第一
2018年3月 Delphi大版内专家分月排行榜第一
Blank
黄花 2016年11月 Delphi大版内专家分月排行榜第二
Blank
蓝花 2011年10月 其他开发语言大版内专家分月排行榜第三
2010年8月 其他开发语言大版内专家分月排行榜第三
2007年5月 其他开发语言大版内专家分月排行榜第三
Bbs1
本版专家分:60
Bbs7
本版专家分:12182
Blank
蓝花 2014年7月 C/C++大版内专家分月排行榜第三
2014年6月 C/C++大版内专家分月排行榜第三
Bbs2
本版专家分:453
Bbs1
本版专家分:0
Bbs5
本版专家分:4205
Bbs1
本版专家分:2
Bbs2
本版专家分:218
Bbs2
本版专家分:110
Bbs2
本版专家分:325
Bbs1
本版专家分:0
Bbs4
本版专家分:1172
Blank
红花 2011年5月 专题开发/技术/项目大版内专家分月排行榜第一
2011年4月 专题开发/技术/项目大版内专家分月排行榜第一
2011年3月 专题开发/技术/项目大版内专家分月排行榜第一
2011年2月 专题开发/技术/项目大版内专家分月排行榜第一
2011年1月 专题开发/技术/项目大版内专家分月排行榜第一
2010年12月 专题开发/技术/项目大版内专家分月排行榜第一
Blank
黄花 2011年11月 专题开发/技术/项目大版内专家分月排行榜第二
2011年8月 专题开发/技术/项目大版内专家分月排行榜第二
Bbs2
本版专家分:381
Bbs2
本版专家分:381
Bbs5
本版专家分:4205
其他相关推荐
Go游戏服务器开发的一些思考(三十):排行榜服务器设计思路
排行方式 通常有2类排行: 全服所有人排名 前N名排名 考虑到大量用户的情况下,实时全服排名难度很大,一般可以做成离线排名的方式。 这里考察的是大量用户的情况下,前N名的实时排名方法。 背景假设 这里假设,有500万玩家同时在线 那么极端情况下,每秒500万玩家可能同时改变战力值 初步设计 启动时,加载最新前N名排名数据。 变化的战力输入到排序服务,通过排序器,...
Java游戏服务器-百万规模实时排行榜实现
 有人的地方就有对比,游戏中自然也少不了排行榜。 当前项目设计目标是,每个服务器玩家数量为百万左右。每个玩家都有战力、经验等属性,战力最大值在50万以内。 现在期望能有战力排行榜,有以下几点需求: 全部角色参与排行,能实时知道某个角色的排名 排行榜显示前100名玩家详情 排名规则是战力越高排名越前,战力相同则比较经验,经验再相同则比较创建时间。 排行榜算法并不少见,这篇文章介
经典游戏服务架构 (三)全服全线模型
尽管分服的游戏模型已经运营了很多年,但是有一些游戏运营商还是希望能让尽量多的玩家一起玩。因为网游的人气越活跃,产生的交互越多,游戏的乐趣也可能越多。这一点最突出表现在棋牌类网游上。如联众、QQ游戏这类产品,无不是希望更多玩家能同时在线接入一个“大”服务器,从而找到可以一起玩的伙伴。在手游时代,由于手机本身在线时间不稳定,所以想要和朋友一起玩本来就比较困难,如果再以“服务器”划分区域,交互的乐趣就更
[原创]游戏中的实时排行榜实现
1. 前言 2. 排行榜分类 3. 思路 4. 实现 复合排序 4.1 等级排行榜 4.2 通天塔排行榜 4.3 坦克排行榜 5. 排名数据的动态更新 6. 取排行榜 7. Show The Code 1. 前言 前段时间刚为项目(手游)实现了一个实时排行榜功能, 主要特性: 实时全服排名 可查询单个玩家排名 支持双维排序 数据量不大, 大致在 1W ~ 50W区...
经典游戏服务端架构(二)全服分线模型
一、模型描述 由于多进程服务器模型的发展,游戏开发者们首先发现,由于游戏业务的特点,那些需要持久化的数据,一般都是玩家的存档,以及一些游戏本身需要用的,在运行期只读的数据。这对于存储进程的分布,提供了非常有利的条件。于是玩家数据可以存放于同一个集群中,可以不再和游戏服务器绑定在一起,因为登录的时候便可根据玩家的ID去存储集群中定位想要存取的存储进程。 [图-全区分线模型] 二、存储的挑战
全球同服游戏服务端设计
现在越来越多的游戏,像皇室战争一样,会做成全球同服,统一入口。这种方案带来的用户体验和以前的滚服游戏很不一样。这里就全球服的游戏谈谈架构设计。 首先,所谓的全球同服只是给玩家的感觉是只有一个服,而非真的只有一台服务器。否则像皇室战争这样火爆的游戏性能上是不可能扛得住的。一般底层做成分布式的结构,主要划分成: login:负责注册和登录,注册时通过负载均衡选到合适的game服,然后返回game...
学习游戏服务器编程进阶篇之全球同服技术架构
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 服务器架构技术一直是热点,游戏服务器,各种数据平台系统等等都离不开服务器的架构设计,服务器架构设计
大型多人在线游戏服务器架构设计
  由于大型多人在线游戏服务器理论上需要支持无限多的玩家,所以对服务器端是一个非常大的考验。服务器必须是安全的,可维护性高的,可伸缩性高的,可负载均衡的,支持高并发请求的。面对这些需求,我们在设计服务器的时候就需要慎重考虑,特别是架构的设计,如果前期设计不好,最后面临的很可能是重构。 一款游戏服务器的架构都是慢慢从小变大的,不可能一下子就上来一个完善的服务器构架,目前流行的说法是游戏先上线,再...
全球同服 游戏服务器架构设计
著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:马剑飞 链接:https://www.zhihu.com/question/31103751/answer/64631116 来源:知乎 首先,游戏服务器是IO密集型服务器,它的主要瓶颈在网络IO,而不是CPU,这点要记住了。所以经常服务器问题都会出现在网络IO,带宽,数据库磁盘读写上面,而非CPU上面。
游戏中 不停服更新
物品投放的热更新机制需求描述: 游戏在上线后会不断的推出更新,其中更新的内容主要包括UI资源与新的道具物品,UI资源通过patch更新,在进行更新时仅牵扯单个客户端的表现,因此不存在版本问题,可直接进行更新。游戏中新的道具与物品的更新,因为需要客户端与服务端功能的支持,如果采用热更新就存在客户端版本与服务端版本不一致以及组队时不同客户端版本不一致的情况,尽管可以在玩家登陆时对客户端版本进行强制升级...
分区分服和全区全服的对比
为什么要做架构的区分? 1.游戏类型的不同,导致需要在DB层做区分:全区全服就只有一个DB,但是分区分服的每个服都有独立的DB。 2.游戏类型的不同,导致数据互通性不同;逻辑服务器页游必要作区分,比如各个平台需要独立运营,独立结算,开服活动只能针对特定服等等; 3.单服承载的玩家数量级不同,导致架构上调整:全区全服所有玩家在一个服,分区分服玩家分摊在各个不同服,单服玩家数量不在一个级别,导致...
浅谈滚服游戏如果实现一键合服
背景 近几年的游戏行业中,出现了各种各样的滚服游戏,包括页游,手游,H5游戏等等。滚服游戏和大服游戏的区别在于同时游戏人数,大服游戏是有很多用户在一起玩,甚至几十上百万玩家。而滚服游戏则一般会设计游戏在线上限,比如3000,达到上限则新开一组服务器,并引导用户进入新区。 滚服模式是游戏类型,技术架构和急功近利的坑钱策略等因素共同决定的,大服游戏包括绝大部分端游,以及类COC这样类型的游戏。另外...
谈谈我们的游戏逻辑服务器实现(一)
谈谈我们的游戏逻辑服务器实现(一) APR 23RD, 2012 我们的逻辑服务器(Game Server,以下简称GS)主要逻辑大概是从去年夏天开始写的。因为很多基础模块,包括整体结构沿用了上个项目的代码,所以算不上从头开始做。转眼又快一年,我觉得回头总结下对于经验的积累太有必要。 整体架构 GS的架构很大程度取决于游戏的功能需求,当然更受限于上个项目的基础架构。基础
全球同服--coc类游戏服务器架构
首先,游戏服务器是IO密集型服务器,它的主要瓶颈在网络IO,而不是CPU,这点要记住了。所以经常服务器问题都会出现在网络IO,带宽,数据库磁盘读写上面,而非CPU上面。 其实全球同服也就是大量在线嘛,比如C1000k,甚至更多。同服,只是你看起来同服,而不是他本身就在同一个服务器上,或者同一个进程上,这是完全不现实的。一个好的服务器进程,能同时承载10k的游戏玩家(还依赖于游戏逻辑复杂度)已
使用Redis实现实时排行榜
微信扫码关注下方公众号,获取更多学习资源 游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。 一个典型的游戏排行榜包括以下常见功能: 1.  能够记录每个玩家的分数; 2.  能够对玩家的分数进行更新; 3.  能够查询每个玩家的分数和名次; 4.  能够按名次查询排名前...
游戏服务器的登陆框架
游戏登陆大致过程如下: 1.客户端发送请求给登陆服务器,登陆服务器进行校验(账号睁不正确) 2.发给全局服务器,获取登陆状态与令牌(这个账号是不是已经在登陆啦,或者在别的区服在玩啦),成功的话发一个令牌 3.全局返回给登录服务器再返回给客户端 客户端拿到这个令牌以后就登陆成功啦,可以用这个去请求一些其他的数据。 客户端请求任何东西都是和网关服务器打交道,由网关服务器去与其他的什么游戏逻辑
游戏服务器之逻辑网关(在逻辑服务器中)
本文要说的是游戏服务器之逻辑网关(在单进程的逻辑服务器中),功能是在游戏逻辑服务器中就实现网关的功能。 从网关派送数据包到玩家的网络数据包队列 void CLogicEngine::DispatchPlayerRecvPackets() { CLogicGate *pGate; CPlayer *pPlayer; for (int nGateIdx=g_GateMana
游戏服务器之登录
网关连接之验证 int gateway_session::verifyConn() { int retcode = mSocket.recvToBuf_NoPoll(); if(retcode > 0) { while(true) { unsigned char ptrmsg[tcp_socket::MAX_DATASIZE]; int msglen = mSocket.recv
数据实时排名
排行榜是很多软件的功能需求,比如我们常玩的各类游戏,视频直播,微博等等都有排行榜。现在的排行榜实现方式大都有这两种:1.定时排名,2实时排名,下面就让我来介绍我对实时排行榜的理解。 实时排行有两个问题:        1.  如果数据量很大怎么做到实时排名?        2.  如果要实时调整排名数据怎么做到快速调整?        对于数据量小的程序可以在单个机器上完成就ok了,其实主
游戏服务器开发和维护的一些经验
四年前, 我进入现在这家公司, 之后我一直在做一款网页游戏的服务器开发. 前不久, 我调到了另一个项目. 趁这个机会, 我把这几年的开发和维护经验做一下总结. 首先说一下项目的情况. 为了避嫌, 项目名字我就不说了, 项目是一款模拟经营类的网页游戏, 用户量很大. 目前总用户数超过两亿. 日活跃用户上千万, 同时在线百万左右. 月流水七八百万. 我在项目里一直从事服务器端开发,
游戏跨服架构进化之路
江贵龙,游戏行业从业8年,历任多款游戏项目服务器主程,服务器负责人。 关注游戏服务器架构及优化,监控预警,智能运维,数据统计分析等。1.背景虽然游戏市场竞争激烈,产品格局变动较大,但游戏产业一直处于稳步增长阶段,无论是在端游,页游,手游还是已经初露端倪的H5游戏。可以预见,游戏类型中,MMOARPG游戏仍然会是引领市场的主流趋势,贡献着大部分流水,市场上也仍然在不断涌现精品。研发团队对MMO游戏的...
erlang游戏服小结
1. 服务器启动了,无法登陆游戏 可能原因: 用root用户启动过游戏服,于是所写的日志文件的权限是root,再以普通用户启动的时候,导致没有权限写日志到那个日志文件(登陆日志) 解法: 删除其他用户写的日志文件,重新启动游戏;
编程之美之实时排名算法
参考文献 某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。 存储结构 首先,我们用一张用户积分表user_score来保存用户的积分信息。 表结构: scoreschema" title="" style="border:0px"> 示例数据: sco
游戏服务器中的数据库异步操作技术和游戏数据的保存机制
http://www.cppblog.com/jaxe/archive/2010/08/30/125258.html 在游戏服务器中,处理玩家登陆需要向数据库查询玩家的账号和密码,玩家上线和下线需要对玩家的角色数据从数据库中读取和保存。可以说,相对于游戏逻辑处理来说,数据库操作是一种相对很慢的操作,即便你通过使用多个线程多个数据库连接来提高数据库操作的处理能力,但是,在高并发高负载的服务
一个即时排名的demo
功能:根据输入框输入的内容,实时进行排名,允许有并列排名实现方法:两层循环,外层是数组本身,内层是去重的数组。使得每一项都与去重的子数组进行一一比较,从而得出每一项的排名。 细节:验证
游戏服务器之网关
多进程的游戏服务器的应用场景下: 网关的功能是处理转发消息,创建、删除、查询角色等。 网关会主动连接所有的场景服务器和中心服务器、数据服务器、社会服务器。 本文内容: 1、网关的初始化 2、网关的处理登录服务器的消息 3、处理其他服务器转发来的共享消息(场景等服务器发来的) 4、处理中心服务器发来的消息 1、网关的初始化 (1)网关的连接池(主动、
实时网络游戏中玩家延时与服务器同步
原文地址:http://blog.csdn.net/paxhujing/article/details/50662580 易竞技前言:在知乎上有玩家提问“在FPS游戏中玩家延时都不一样的情况下是怎样做到游戏的同步?”知乎网友“周恺华”对此给出较为充实的回答,有兴趣了解这方面知识的玩家可以通过下面的回答来一窥究竟。 知乎网友“周恺华”的回复: 声明:下面会大量使用CSGO作为例
游戏服务器之长连接服务器(python)(2)
游戏服务器之长连接服务器实现tcp连接的数据异步收发。 一个网络收发处理进程,一个服务器对象逻辑处理进程。两个进程之间使用管道通信。 网络收发处理进程: (1)网络处理是由反应器的子线程来处理的。 (2)从管道的一端读取数据,读取管道后和网络发送前,需要前处理连包和反序列化来检查包的完整性。这里还缺少合适的连包断包处理。 (3)反应器的子线程接受网络数据再写到管道。 服务器对象逻辑处理进程: (1)读取网络数据并反序列化的是在服务器对象进程的一个接受循环线程里处理。并派送到服务器对象的消息队列。 (2)反应
游戏合服过程
看了好多的文章,又参考以前项目的合服代码,今天终于顺利的完成了合服。 就简单说下自己的合服过程吧。 合服:其实就是把几个数据库合到一起,中间需要处理的有1.主键的冲突,比如ID,当然可以在设计的当初,就让说有的ID 都不同。2.特殊的逻辑,比如说游戏里的势力,他们的科技,国库,帝王等,要怎么处理。3.处理一些特殊的数据,比如说一个3年没有登陆,没有消费记录,并且1级的小号。4.其他具体的小细节
游戏服务器关于玩家数据的解决方案
玩家数据是游戏系统的血液,必须保证有高效正确的处理方案。本文将从持久层框架的选择、数据表结构设计以及数据入库模型三个方面,讨论玩家数据的相关解决方案。
游戏服排行榜实现(面试被问到)
最近面试连续被问到游戏服排行榜如何实现,因为以前一直不觉得是个事,所以突然问到一脸懵逼,现在我自己总结一下。 目前工作中KE排行榜的实现 1.单服排行榜,直接用ruby on rails封装的查询语句实现(这个效率其实非常低,可以优化为redis排序)。 2.跨服排行榜-名人堂,设置了redis的缓存,24小时更新一次,从中心服拉数据,由于数据量小中心服接口内也是用的ruby on rail...
java实现百度排名检索自动获取排名地址并点击访问
主要是根据指定关键词获取手机端访问指定前几页的排名检索情况,指定关键词和指定要进行获取指定域名的排名情况并进行点击访问。
大型多人在线游戏服务器架构设计 - RPC封装原理
RPC框架分为客户端部分与服务端部分: RPC-client的部分又分为: (1)序列化反序列化的部分(上图中的1、4) (2)发送字节流与接收字节流的部分(上图中的2、3) 前一篇文章讨论了序列化与范序列化的细节,这一篇文章将讨论发送字节流与接收字节流的部分。 客户端调用又分为同步调用与异步调用 同步调用的代码片段为: Result = Add(Obj1, Obj2
排行榜的算法
好久不来博客园了,前几天更新个人状态时,也把“技术博客”四个字改成了“荒废已久的博客”。 好久不总结自己的工作和学习了,怎么说也过不去,就来这写一篇浅显的文章,没什么新鲜的内容,算是一篇经验的汇总把。 1. 关于排行榜 各大网站一般来说都少不了排行榜这个东西,一者是提供给商业合作方的数据排行榜,另一者是提供给用户的榜单。 例如豆瓣的新书榜: 2. 打造一个最简单的排行榜 我
Bilibili高并发实时弹幕系统的实现
原文地址:https://blog.csdn.net/zhiboshequ/article/details/68489960点此打开原文站点高并发实时弹幕是一种互动的体验。对于互动来说,考虑最多的地方就是:高稳定性、高可用性以及低延迟这三个方面。高稳定性,为了保证互动的实时性,所以要求连接状态稳定;高可用性,相当于提供一种备用方案,比如,互动时如果一台机器挂了,此时必须保证可以和另外一台机器连接,...
各类游戏对应的服务端架构
卡牌、跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个key进行RC4加密。客户端收到key和时间戳后保存在
游戏服务端高并发优化
1、所有的对象都放在内存,20万用户以下无压力。 2、如果游戏的用户很多,例如超过50万,内存就会不够,可使用LRU算法来淘汰一些数据。 流程:收到用户请求 - 在内存查找用户对象 - 如果不存在就从数据库中加载- 放入内存cache-如果cache中的用户超过20万 - 用LRU算法淘汰最古老的用户数据。 3、避免同步的IO操作,所有会发生写数据库的操作:例如角色获得了经验,要更新数据库;这
全世界顶尖黑客排名
凯文·米特尼克 米特尼克曾被美国司法部称为“美国历史上被通缉的头号计算机罪犯”,他是好莱坞两部反映黑客生活的电影的原型人物。他的最早黑客行为是破解洛杉矶的 公交车打卡系统,因此得以免费乘车。他第一次被抓是因为非法侵入一家公司的计算机网络窃取软件,此外他还入侵过美国国防部的预警系统。米特尼克被判入狱5 年8个月,出狱后从事计算机安全顾问和演讲者的工作。 阿德里安·拉莫 提起
游戏服务器之逻辑服务器的资源分布图
程序主线程: 读取服务器配置,读取逻辑数据配置,启动账号管理器、日志管理器,启动逻辑引擎(启动账号管理器、启动db管理器(连接数据服务器进程)、启动网关、启动日志管理器、初始化游戏命令)。 逻辑网关: 框架是使用多网关结构的逻辑进程。 每启动一个逻辑网关,就会启动对应的网络接收和和数据队列处理线程:包括(1)socket选择线程、(2)socket接收线程、(3)数据接收处理例程(队列交换
海量积分数据实时排名处理
需求概述 积分排名在很多项目都会出现,大家都不会陌生,需求也很简单,积分排名主要满足以下需求: 查询用户名次。查询TopN(即查询前N名的用户)实时排名(很多项目是可选的) 当排序的数据量不大的时候,这个需求很容易满足,但是如果数据量很大的时候比如百万级、千万级甚至上亿的时候,或者有实时排名需求;这个时候要满足性能、低成本等需求,在设计上就变得复杂起来了。 常规积分排名处理
游戏服务器的常用架构
游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。 游戏服务器架构要素对于游戏服务端架构,最重要的三个部分就是,如何使用CPU、内存、网卡的设计:
游戏服务器游戏服务器中的日志处理方式之一
在游戏开发的过程中,我们需要记录一些日志,以便以后了解游戏运行的情况,以及根据日志发现并处理游戏中的突发情况。 一,游戏日志可以分为以下几种: 1)系统日志 2)用户操作日志 3)异常日志,即错误日志 系统日志 系统日志一般描述的是服务器日常运行的状态。比如启动是否成功,每天统计一下内存的占用量,CPU的使用量等信息。用于查检服务器运行的健康状况。这对于技术分析来说是非常重要的。如果没
从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始
写在前面的话      经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善、代码注释少、工程数量大,而无从下手。本文将来通过一个多人联机实时对战游戏——最后一战,来解答以上问题。      其实,我以上问题在我是一个学生时,我也同样因此而困惑,但是后来,我发现,对于文档缺失、注释缺失的项目,需要自己摸索,虽然是挑战,同时也是机遇...
JAVA游戏服务器关闭操作的监听
JAVA游戏服务器关闭操作的监听 今天上午刚到公司,运营的同学跑过给我说“你快看下我们昨天推的活动消失了”,运维的同学跑过来给我说“咱们的几个游戏服务器今天凌晨4点因为内存占用超过设定的4G被自动kill掉了,我运行start.py脚本启动服务器之后,又运行stop.py停服,但是好像数据出了问题,你快看一看”。 一脸蒙蔽:-(然后就检查服务器的启动、停止代码,查看是否有多线程问题,最
登录服和游戏服分开的原因
http://blog.sina.com.cn/s/blog_62f9aed00102w449.html
高性能网路游戏框架总结(有网关服务器)
一、客户端:2D绘制引擎、3D绘制引擎绘制游戏世界的实时画面 二、服务器端:负责响应所有客户端的连接请求和游戏逻辑处理,并控制所有客户端的游戏画面绘制     1、服务器组的架构差的分类          1.1 带网关服务器的服务器架构             1.11 网关服务器:网关服务器的主要职责是将客户端和游戏服务器隔离,                  客户端程序直接
游戏排行榜的实现
在没有接触游戏行业的排行版时,就觉得排行版的实现非常不简单,也不知道是不是自己想的太过于复杂,然后自己特意去百度了游戏排行版的算法设计的比较(http://www.cocoachina.com/game/20150930/13638.html),发现排行榜可大可小吧,具体看你如何做这个功能,我借鉴了别人写的方法,然后自己也实现了一波,发现算法真是一个好东西。 需求背景:查看前top N的排名用户查
游戏服务器 数据同步方案
游戏数据同步方案      首先我们介绍实时对战手游中最难解决的技术问题——弱网络下的数据同步问题。   通过对玩家的游戏数据进行观察,发现玩家的游戏环境存在很大差异,不同玩家会使用不同的2G/3G/4G/Wifi网络,不同网络之间的延迟相差很大。另外移动网络质量不稳定,且都是按流量收费,这些都是需要考虑的问题。手机在网络间的切换,又会造成底层网络断线、地址变化等问题,都是常见
游戏合服方法 ——MSQL数据库的拷贝与合并
游戏合服方法 ——MSQL数据库的拷贝与合并 在游戏上线运营过程,经常需要执行合服操作,需要对多个库的相同表数据进行合并。 常见的数据库拷贝方式有两种: 第一种:复制Table +Data,这个作法Primay、index key都不会复制, 需要手动添加. CREATETABLE new_db.table_name SELECT * FROM ol
Java排行榜中多级排序的一种正确实现方式
需求:1,外层根据参与人数排序,并据此分页             2,内层首先根据级别排序,级别相同时,按照票数排序,固定展示8条 实现基础:ArrayList 可能的坑:仅仅对最外层list执行一次排序调用,此时,无法确保总是正确,有时正确 正确姿势:首先对每个内层list执行排序,然后加入外层list,最后对外层list执行一次排序 代码实战: 1.内层model impo...
游戏服务器之跨场景
游戏服务器由于要容纳更多的玩家,常常是分布式的。由于场景服务器进程可能多个,所以跨场景处理需要处理进程内或跨进程)。
《从零开始搭建游戏服务器》项目发布到Linux环境
前言: 之前我们提及了如何使用Maven来创建、管理和打包项目,也简单过了一遍Linux中搭建Java开发环境的步骤,现在我们就开始将我们之前开发的项目demo发布到Linux环境下,并让它正常运行起来。 发布思路: 使用Maven将项目打包为.jar 将项目的.jar和项目所有依赖的jar包都复制到Linux下 创建项目启动脚本来启动项目 准备工作: 查询Linux系统机器的Ip地址:方
中国通信服务股份有限公司之广通服的划分!
广东省电信实业将下属多家企业进行重组,建立出33家拥有相当规模与市场竞争力的公司。第二阶段重组将重点对此33家企业进行。在重组后,广东省电信实业将会划分为四大板块。下面为板块划分情况。   一、14家企业归入通信建设业务板块,包括:    1、广东省电信规划设计院、广州市电信设计有限公司、广东南方电信规划咨询设计院有限公司归入“工程设计”专业类别;    2、广东省电信工程公司、广州市通信建设有限
游戏服务器集群
一 分类游戏服务器按照功能分独立的进程,一般分类如下: gm 中心服 db 数据库服 game 游戏逻辑服 gate 前端服 gm在一个集群中只有一个,其他可以有多个,同类服务器之间都没有连接。gm跟所有的服相连,帮助其他服交换信息,控制其他服的关闭,跟所有的game连接,用于广播和game之间信息的转发。db跟数据库相连,接受game的请求,负责数据的存取,方便game异步读写数据库。gam
考试排名(结构体的运用)
Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么“AC”,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题“AC”后,就要与你算一算帐了,总共该题错误提交了几回。虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间。特别
游戏服务器网关设计
网关,通俗的讲,是消息达到服务器的第一关,它负责与客户端建立连接,接收客户端发送过来的消息,并对消息进行验证,分发等。不同的服务系统网关负责的功能多少可能不太一样。但是本质是不变的。   1,网关的功能 1.1 与客户端建立连接 这个应该是网关最基本的网功了,一个服务做为网关,所有客户端来的消息都必须先到达这里。客户端与网关可能是长连接,比如socket,也可以是短连接,比如http。 ...
怎样在5秒内从5亿记录的用户积分表实时得到用户的排名
今天在群里有网友提出如下问题:  有表 A 字段信息如下:(手机号码, 用户积分)怎么能够在5秒内返回用户积分在所有用户中的排名 (用户在登陆系统时给出登陆时的排名 ,用户积分可能增加、减少 ,在本次登陆后的积分变化在下次登陆时重新排名,积分相同的用户排名相同,这时并给出同一排名的用户数是多少)目前数据量在5亿左右 ,可以加索引,根据需要建立新表 等 硬件配置中等水平 。请给出具体方案
关于Mongodb中周榜、月榜、总榜的设计思路
今天无意中翻到了追书神器的API接口: api.zhuishushenqi.com/ranking/54d42d92321052167dfb75e5 追书神器 周榜 api.zhuishushenqi.com/ranking/5a6844aafc84c2b8efaa6b4e 追书神器 好评榜 用过mongodb 的人都知道类似于54d42d92321052167dfb75e3...
实时排序算法(跳表)
说明:采用和Redis排序算法类似的跳表,支持大量数据的实时排序。 public class SkipListLevelInfo where T : class { public SkipListNode Next; public uint Span; } public class SkipListNode where T : class { public T Item
关于游戏服务端架构的整理
一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。 这里说的模块可以指一个进程,或者一个线程方式存在,本质上就是一些类的封装。   对于服务器的并发性,要么采用单进程多线程,要么采用多进程单线程的方式,说说两种方式的优缺点:   一、单进程多线程的服务器设计模式,只有一个进
网络游戏百万人同时在线服务器架构实现
QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,因为QQ除了这100万的游戏在线人数外,它还拥有3亿多的注册量(当然很多是重复注册的)以及QQ聊天软件900万的同时在线率,我们已经可以预见未来由QQ构建起来的强大棋牌休闲游戏帝国。  那么,在技术上,QQ游戏到底是如何实现百万人同时在线并保持游戏高效率的呢?  事实上,针对于任何单一的网络服务器程序,其
如何正确关闭游戏服务器
一,如何正确的关闭游戏服务器 1,最简单粗爆的方法 在Linux系统上,使用ps -aux|grep java 可以查到所有运行的java程序的pid,即进程号,然后使用kill - 9 进程号,杀死一个进程。 这样做虽然简单快速,但是会有一个问题,如果我们运行的服务器有缓存的数据,还没有来得及进行持久化存储,那么这样操作,内存中的数据就会丢失。kill - 9是一个必杀命令,不管进程
Python游戏服务器开发日记(八)整体方案改变了……
老大和CTO提出了新的方案,之前的架构被推翻了。         简单来说,就是使用多进程,工作进程启动python环境。         最奇葩的是,我们回到了利用共享内存保存entity的方案。entity里保存纯data,是一个纯的二进制数据块。         Entity在用的时候,包装成PyObject给Python使用。如果修改了,则重新打包成二进制块存回去。
高性能分布式游戏服务器框架
欢迎大家Fork mqant开源框架 为什么决定要重新造一个轮子? 目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些考量,希望大家能开放的讨论,有不恰当的地方也请指正。 首先是开发语言 目前用于游戏服务器开发的主要应该有以下这些语言: c/c++ 优点: 性能很好 开源框架:
百万用户级游戏服务器架构设计(一)
服务器结构探讨 -- 最简单的结构   所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。   好的结构不是一蹴而就的,而且每个设计者心中的那把尺都不相同,所以这个优秀结构的定义也就没有定论。在这里,我们不打算对现有游戏结构做评价,而是试着从头
Photon Server游戏服务器从零开始学习(六)游戏登录与注册操作
为了在客户端与服务器端使用共同的code,创建共有引用Common:public
游戏服务器日志杂谈
简介我们游戏服务器是使用异步请求的方式来执行玩家的每一项操作,现在的日志系统主要记录了服务器接受到的网络消息已经发出的网络消息,最近在修正bug时发现了现在log策略的一些缺陷,导致定位问题困难。返回值玩家的每个请求都有失败的可能,那么由于什么原因失败,该请求最终执行的结果是怎样,一定要在该请求的response中体现出来。我们游戏中有一个eErrorInfoGeneral, 之前有同事开发的时候不
基于c#开发的游戏服务器
这是一个利用c#语言编写的简易的服务器,实现了信息的处理和转发
手游服务端框架之每日重置逻辑
大部分游戏都有每日重置的逻辑。关于每日重置,我们需要考虑两个问题。一个是如何区别在线玩家和离线玩家,一个是保证业务的线程安全的。本文提供一种方式,比较简单地实现了重置业务。
网络游戏并发如何保证数据正确
一直想独立开发一款网络游戏,曾经尝试了各种语言,也学习了各种框架,但都是糊里糊涂,服务器端根本搞不清楚到底咋回事,更别提开发了。自从接触了go语言,2个月来,对网络的认识在整体上有了很大提升,明白了服务器的含义,只是一个TCP长连接,来处理游戏的各种逻辑。当然分布式系统还是不懂,感觉很难控制,看了几个分布式架构,但都是有一个接口负责把消息进行转发,感觉这样的话接口的压力很大,负责的任务也太多,后端
游戏服务器与客户端之间的通信
占坑,即将要写的部分
一个高可伸缩的游戏服务器架构
一个高可伸缩的游戏服务器架构原文连接:http://blog.gotocoding.com/archives/827设计完socket通讯协议后,就面临着服务器架构设计了。我希望他是一个去中心化且具有高可伸缩性的集群架构。水平扩展是高可伸缩的首要条件,因此,在设计之初就必须考虑好水平扩展考方案。事实上这一部分几乎花了我1整个月的时间来设计,在此期间我重写了3版才总算确定下来我认为可用的方案。第一版设
游戏服务器开发】SDK接入——以nibia为例的SDK接入总结
以nibia为例的SDK接入总结      SDK接入主要是接第三方平台的登录和支付流程,以手机游戏为例,第三方平台就是国内较大的游戏中心和手机应用商店。 游戏商开发手机游戏的流程: 1、开发完游戏逻辑—2、接入第三方SDK渠道的登录和支付,并且和第三方联调完成后打包客户端——3、客户端上传到第三方游戏平台—4、第三方游戏平台审核通过后上架到游戏中心或者手机应用商店供玩家下载——
实时的排行榜刷新问题
项目中常见问题模块中常见列表的展示: 1、数据库中写死若干(如20)常见问题,每个问题对应的count(点击量)字段初始化为0; 2、缓存redis用一个zset(有效期1天)统计每天用户对20个问题的点击增量; 3、每天起一个定时任务,通过数据库中的count字段排序查询出top10问题(可用数据库做缓存,也可用redis做缓存),展示在常见问题列表; 4、每天起一个定时任务,将redi
golang的开源游戏服务器框架
golang的游戏服务器框架有leaf, cellnet, mqant等. 一. 选择 cellnet好像使用callback回调方式, 直接pass. mqant使用了mqtt协议, 感觉写了太多, 有点复杂, 也pass了. 以上两个都没看源码, 就是看介绍的感觉. 最终选择查看leaf源码, 因为leaf貌似最轻量最简单. 二. leaf源码分析 …...
游戏服务器之角色移动
角色移动主要是要处理前后端的移动同步和阻挡检测。 (1)前端发送移动请求 (2)检查该角色是否可以移动到该位置,并记录移动请求 (3) 角色移动的调用层次: 逻辑主循环-->场景管理器遍历->场景循环-->角色遍历-->角色循环-->角色移动 bool scene_player::loop() { //每隔500毫秒计算角色的移动 if(_
android入门:单击按钮显示当前时间
首先建立一个android工程adtest,这个实现有很多种方法。 方法1:只改动MainActivity.java文件 MainActivity.java代码: package com.example.adtest; import android.app.Activity; import android.os.Bundle; import android.view.View; impor
基于netty的rts游戏服务器搭建
netty使用tcp长连接,redis数据库,帧同步的方式实现rts游戏java服务器框架,lobbyServer,gateServer,battleServer的分模块架构,带你走进java游戏服务端的入门之旅,自定义协议分发方式简单好用。
使用redis实现实时排行榜
游戏中存在各种各样的排行榜,比如玩家的等级排名、分数排名等。玩家在排行榜中的名次是其实力的象征,位于榜单前列的玩家在虚拟世界中拥有无尚荣耀,所以名次也就成了核心玩家的追求目标。 一个典型的游戏排行榜包括以下常见功能: 1.  能够记录每个玩家的分数; 2.  能够对玩家的分数进行更新; 3.  能够查询每个玩家的分数和名次; 4.  能够按名次查询排名前N名的玩家; 5.  能够查询排在指定玩家前...
【服务器架构】MMOG & ZeroMQ
既然 MMORPG 都有千篇一律同质化的趋势,好歹我们技术人员也应该总结出点东西来,新项目开发可以用现成的模式。 一般来说,MMORPG 服务器要解决的问题无非是,同步玩家的位置,状态,把这些信息广播出去(细分的话,有非战斗环境和战斗环境);需要建立一个聊天服务,供玩家文字交流;有一个信息发布渠道;有任务 NPC 和玩家一对一交流;玩家调整自己的装备(也可以看成是和一特定 NPC 交流)。 以
php统计查询,实时更新
在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩,用户的银行卡张数等等,ThinkPHP为这些统计操作提供了一系列的内置方法. 方法 说明 Count 统计数量,参数是要统计的字段名(可选) Max 获取最大值,参数是要统计的字段名(必须) Min 获取最小值,参数是要统计的字段名(必须) Avg
分布式游戏服务器框架sframe(一)—— 整体思想
网上有很多开源服务器框架,但总感觉用起来不大顺手。于是乎,我利用闲余时间,开发整理了一套自己的分布式游戏服务器框架。这套框架到如今也差不多成型了,于是我准备写一些相应的文章,介绍下这套框架里的一些关键点的实现,旨在与更多人分享交流一下经验。这是一个长期战线,我计划本文先简单介绍一下大概思想,后续再陆续推出其他的实现上的东西。          至于框架的名字,想了好久也想不出,哎,取名字实在非我
游戏服务器游戏服务器如何存储日志,哪些日志是必要的。
在游戏开发的过程中,我们需要记录一些日志,以便以后了解游戏运行的情况,以及根据日志发现并处理游戏中的突发情况。 一,游戏日志可以分为以下几种: 1)系统日志 2)用户操作日志 3)异常日志,即错误日志 系统日志 系统日志一般描述的是服务器日常运行的状态。比如启动是否成功,每天统计一下内存的占用量,CPU的使用量等信息。用于查检服务器运行的健康状况。这对于技术分析来说是非常重要的。如果没
我们是很有底线的