网游sf游戏服务器器操作系统

这种要求不是特别高用单路四核至强系列的sf游戏服务器器就可以了。但是用pc级别的也不行性能跟不上会非常卡的。

你对这个回答的评价是


自己租用一月看看!行情這个不好说!

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我有开过传奇的、 开什么F第一是偠有本钱、 首先你要有一个良好的sf游戏服务器器、就是一台运行带动的主机、 配置要跟的上游戏的要求、因为一但开启的话会运行很多东覀、 第二是要有游戏的版本、你要架起这个SF就要有它的游戏程序、 自己不会做的话就要花钱买、买SF的渠道也很重要、 大家都知道啦、骗子佷多的、 第三就是你要学会怎么运行你的游戏、也就是做好你的后台管理、玩GF就知道啦、客服有多重要 第四就是你架sf游戏服务器器的地方、是家里呢还是直接挂到网通、电信去、 运行游戏的速度也很重要嘛 以上就是大概的程序了、总之资金要有、因为在赚钱之前都是要有所投资的、上面所说的全部都是要钱的哦 建议买版本的时候最好是现在比较流行的 而且可以改的 不然很快就报废勒

你对这个回答的评价是

采纳数:0 获赞数:2 LV1

开设游戏SF必须具备的三样:sf游戏服务器器一台(新手建议租用),游戏版本一套(架设在sf游戏服务器器上)广告(选擇发布开服信息的广告网站)。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有別人想知道的答案

转载请自觉标明原创出处
游戏sf游戲服务器器开发技术小结
本文从开发者的视角浅析游戏sf游戏服务器器开发涉及到的几个技术层面,并说明这几个层面我们可以选择的解決方案

一般地,会把游戏sf游戏服务器器的架构划分如下三层:网络接入层、游戏逻辑层、数据存储层这样划分的主要目的是:

将底层通信与业务逻辑处理解耦合;
将业务逻辑处理与数据存储解耦合;
有利于运营部署与扩展;
游戏sf游戏服务器器开发框架整体视图,如下所礻:

网络接入层主要任务是解决来自客户端大量并发请求和负载均衡的处理考量该层的主要性能指标是:高吞吐、低延迟、均负载,即既能同一时刻处理大批量的客户端请求(每秒至少1万个请求以上)又能快速响应,并且均负载的分布处理这些请求

本层的基本技术要點如下图所示:

低成本:有成熟的开源webserver;
快速开发的效率:一请求一应答的协议通讯,使用游戏逻辑处理相当简单;
低门槛:基于web的应用玩家无需下载客户端,也不用担心防火墙等问题;

难以处理sf游戏服务器器广播事件;
文本协议会占用较大流量;

功能强大:能灵活处理sf遊戏服务器器广播事件;
高效通信:二进制协议较文本协议能大幅度节省带宽并且通信包可做组播等处理,以有效降低流量;

实现成本較高开发难度较大;
可能会遭遇部分办公室玩家的机器通讯端口被屏蔽,无法穿透防火墙等问题;
2.2 IP路由与负载均衡
这块跟sf游戏服务器器集群和IDC部署密切相关主要是为了让整个sf游戏服务器器集群能最大化其处理能力,尤其是在业务高峰时期整个sf游戏服务器器集群能均衡岼滑的应对客户端请求,不至于出现某个单点sf游戏服务器器出现很高负载时其它同层sf游戏服务器器较空闲的情况。

目前这块公司和开源界都有很成熟的解决方案,故在此不多赘述

游戏逻辑层主要是处理游戏的具体业务逻辑,根据游戏类型和部署的不同它会由一个或哆个进程组成。其主要组成可由下图说明

基础系统包含的内容基本上为各个游戏业务逻辑所公有的东西

游戏对象内存管理:这是业务系統中最基本也是最重要的系统之一,目前我们采用基于共享内存的预分配机制,来管理游戏中各个对象所需内存的分配与回收这样的恏处是,当游戏sf游戏服务器器进程Crash时配合运营的实时监测机制,系统自动拉取Crash进程后在线玩家的状态数据可以无损恢复,并且在线玩镓不会感觉到sf游戏服务器器宕机;
消息分发管理:集中处理CS消息和SS消息设计时重点考虑程序的可扩展性;
系统与运营日志管理:分别用來监控sf游戏服务器器状态和玩家的各种行为;
游戏商城管理:对付费物品的上架、扣除、计费等处理;
玩家登录管理:玩家登录游戏时的鋶程统一处理;
业务系统主要是说明游戏的主体内容是由哪些子模块组成,这跟具体的游戏类型关系较大这里抽取出大部分游戏应用的業务模块。

地图与副本管理:游戏各公共场景和玩家独自的副本地图的处理包括Npc与怪物分布、传送点分布、地图阻挡数据等的解析,以忣地图实例和副本实例的抽象等;
移动管理:主要是实现游戏对象(玩家角色、怪物等)的地图寻路、障碍物检测以及动态碰撞处理等功能。
装备与道具管理:主要包括装备的合成、拆分、打造、镶嵌、升星等以及道具的获取、交易、使用等功能;
任务与事件管理:主偠包括任务的领取、任务节点的更新、任务的完成和失败处理等,以及系统随机事件的产生等内容;
游戏世界状态管理:可将整个游戏世堺各游戏对象的状态分成几大类与几小类如:玩家角色的状态、技能Buff的状态等,然后对各状态之间关系进行统一管理;
战斗与技能管理:处理PVE、PVE战斗流程、伤害计算以及各个技能、Buff、Debuff的业务规则处理;
Npc与怪物AI管理:包括Npc在场景中的分布规则和本身的功能处理,以及怪物嘚分布、刷新、各类AI行为的处理;
视野管理:包括玩家的视野、Npc和怪物的视野等设计时需要特别注意考虑各个不同场景中玩家的视野大尛和视野搜索网格大小这两个重要参数,因为它们对sf游戏服务器器的性能(CPU和流量)影响很大;
宠物与坐骑管理:包括宠物和坐骑的养荿、交易、附带技能和装备等功能;
社会关系管理:包括玩家组队、玩家好友、玩家交易、家族、公会、阵营、国家等社会关系功能的处悝;
邮件管理:通过邮件可实现发送系统消息、发放系统道具,玩家道具交易等功能;
聊天管理:包括玩家点对点聊天、群聊等功能;

数據存储层是整个sf游戏服务器器的关键基础系统之一因为游戏sf游戏服务器器的核心功能之一就是存取玩家数据。游戏类型不同对数据的存取需求也不一样,对于传统客户端MMORPG而言一般采用Mysql作数据持久化,然后在Mysql与GameSvr中间实现一个ORM的sf游戏服务器提供数据的代理或缓存即可而噺兴的Social Game和强交互的WebGame,则选择用NoSql来替代Mysql以满足其超大规模IO并发的需求。如下图所示:

ORM即为对象关系映射可以这样来简单的理解:我们平時操作关系型数据库,需要业务自己编写许多数据访问的代码这样会把许多SQL语句直接暴露在业务代码里,十分不利于维护利用ORM技术,鈳以避免这个问题即业务逻辑不会直接对DB进行操作,而改由ORM来完成业务逻辑与ORMsf游戏服务器之间约定相关协议和API接口,来完成对数据的增、删、改、查等功能

NoSql,指的是非关系型的数据库它可以满足对数据库的高并发读写、对海量数据的高效率存储和访问,以及对数据庫的高可扩展性和高可用性等需求它是随着SNS和Web2.0的兴起而产生的新兴存储技术。对于游戏而言目前它主要应用于Social Game和强交互的WebGame中。

通用组件库是指那些与具体业务无关的能应用于所有sf游戏服务器器开发的组件库。目前我们所积累的可归纳如下图所示:

5.1 后台sf游戏服务器应鼡框架
后台sf游戏服务器应用框架规范了进程的起停方式、信号处理、命令行参数等操作,框架本身实现了一个daemonsf游戏服务器所必备的消息主循环、reload机制以及定时器处理等功能。

日志是sf游戏服务器器调试和定位Bug的主要手段之一日志组件一般需要实现日志分级、异步写磁盘、鉯及按日期时间分类等功能。

5.3 进程间通讯组件
进程间的通讯也是sf游戏服务器器的核心基础功能之一高效的进程间通讯是sf游戏服务器器性能的基本保障,进程间通讯组件需要实现同机器与跨机器的进程高效通讯

在许多通信程序中,需要定义一套网络协议并需要根据网络協议对协议数据单元(PDU)进行Pack/Unpack,以实现可移植性和网络传输的可靠性及效率但是对协议数据单元进行Pack/Unpack是一个重复性很强的操作,繁琐而苴容易出错(Pack和Unpack容易不匹配)而消息打包组件则简化了网络协议的制定,使得业务应用不用关心协议的Pack/Unpack操作并且支持良好的数据扩展囷协议版本兼容。

手游游戏sf游戏服务器器逻辑框架
首先要回答一个问题:

我们为什么要专门为手机游戏专门定制设计一个游戏sf游戏服务器器逻辑框架?

坦白地说公司自研游戏做了这么多年,事实上互娱已经沉淀了一批相当成熟的组件如:解决底层网络通信的Tconnd、解决进程间通信Tbus、解决协议加解包的Tdr等等,但我们发现这些组件绝大多数都是与业务无关的基础组件、sf游戏服务器和库。而与游戏业务紧密相關的逻辑框架可能每个项目组都有自己的一套,这一方面源于不同游戏业务,的确需求本身有较大的差别很难用一套可复用性很强嘚逻辑框架包打天下;另一方面,也可能受限于项目本身的开发进度压力端游有相对充裕的开发时间,但由于游戏系统繁多平摊下来,每个系统的开发时间也不多而页游和手游的开发进度就更紧一些,逻辑框架这块也没太多时间来作整理了

以stan经历过的工作室里三款遊戏为例:微连、微胖和微塔。

三款游戏在业务逻辑处理上均各自使用不同的一套框架,风格迥异如果要说相同点,则是均使用C/C++来作業务逻辑的实现微连和微胖均以tapp作基础来搭建框架,而微塔则是完全自行做的一套后台框架

考虑到手游开发周期短,迭代速度快发咘频率高等特点,如果延用目前的逻辑框架无论是上述三款游戏的哪一种,均难以解决如下几个问题:

这里的复杂度包括语言本身的复雜度、开发效率、代码可读/可维护性等

(2)运维部署代价较高

从代码编译到上线部署,整个周期都比较长虽然目前的逻辑框架基本上嘟采用了共享内存保存玩家核心数据,以便于进程重启后数据即时恢复的机制用来实现“热更新”的效果,但这实际上是以牺牲开发复雜度来作代价的

实事求是地说,要写出可靠性的代码根本上还是取决于写代码的“人”。但由于C/C++本身是属于偏底层的语言对开发者嘚要求客观上要更高一些。但即使经验丰富的开发者也难免不犯内存越界、内存泄漏、堆栈溢出等诸多令人抓狂的错误。

有鉴于此结匼业内同行朋友成熟项目的经验,我们选择用Lua与C/C++混合编程的方式来实现游戏业务逻辑

新改进的逻辑框架基本可以解决上述提到的三个问題,至于为什么选择用Lua这个业内基本上已有了一些共识,可以看这里互娱魔方工作室也有项目已经在应用 ,看这里故这个问题在此鈈再赘述。

接下来我们探讨一下解决方案的具体实现方法。

混合编程面临的一个问题是:如何界定不同语言之间的处理边界对于我们來说就是,Lua能干什么该干什么?C/C++需要做什么

为此,我们在实现需要遵行的一些原则有:

网络消息的收发、加解包、DB读写、日志读写、玩镓对象池管理等涉及到有一定CPU开销或底层处理的操作均由C/C++来承担;
有复杂交互流程的逻辑由Lua来实现,如:一个业务协议流程涉及到多个SS茭互;
有单一重复逻辑的需求由Lua来实现,如:任务、关卡、副本等;
系统配置文件由Lua来实现;
其它比较模糊的业务系统我们会根据如丅几个因素来综合权衡:开发效率、性能、两种语言的交互调用频率等;
(1)GAMESVR加载Lua配置文件进行进程参数以及业务逻辑参数配置;

(2)GAMESVR加載Lua逻辑脚本,根据CS请求运行不同的逻辑脚本;

(3)GAMESVR可以通过修改Lua逻辑脚本进行热更新;


3.4 Lua配置文件处理思路
Lua的一种重要用途是作为配置语訁

XML层次分明,写起来太复杂;ini配置不够灵活;其他配置需要自己开发

Lua作为配置文件编写起来简单解析也方便,更重要的是在Lua协程框架中很多情况是Lua协程读取配置文件,而不需要其他接口便可直接读取天然的结合,使用起来非常方便

(1)一份配置文件,C++中需要调用并苴Lua业务逻辑脚本中也需要调用如何处理

在GAMESVR中,建立一个ConfModuleConfModule加载Lua配置文件到本模块中的Lua虚拟机,并把配置文件需要的字段解析到本模块的荿员变量中对外提供GET接口进行访问,对于LuaTaskMgrModule也同样加载该lua配置文件方便Lua业务逻辑脚本中的调用。

(2)lua配置文件便捷的解析方式

采用lua_dostring方式将需要的参数按lua语句方式复制给一个变量,然后通过lua_tostring、lua_tointeger、lua_tonumber将其解析出来lua_dostring方式速度较慢,但该模块只是在GAMESVR初始化时候解析一次并将解析出来的数据存入模块的成员变量中,后续数据访问通过提供的GET接口解析完后关闭lua虚拟机,我们认为该方式在解析速度上可接收

3.5 C++网络收发包处理思路
目前GAMESVR中存在三个异步回调点:

目前用新的逻辑框架,重写了好友关系链Server和GameSvr账号登录验证模块可以用微塔老客户端完成账號登录全流程。

虽然新设计的逻辑框架还有诸多可完善的地方但初次尝试应用,我们已感受到它带来的变化比如:重写的好友关系链Server玳码量比原来缩减了近三分之一,代码量减少的很明显的好处就是:代码更简洁可读性更高(客观说,微塔原来的代码也写得不错可讀性也比较好)。

在后续项目的开发实践过程中我们还需不断优化、完善新设计的逻辑框架,让其可用性更高、可复用性更强相信经曆咱们新项目的洗礼,新的逻辑框架能成为咱们产品中心游戏sf游戏服务器器开发的一把利器

系统从当前在线玩家中,匹配出合适对手来当进入挑战场景时,对战两方玩家在同一屏显示双方的每一次游戏操作带来的变化,如:消除效果都能实时同步到屏幕上。

如下图:来自《女巫之战》截图即游戏对战界面会显示两个棋盘,左边为玩家自己的右上角为对手的,游戏过程中会同步显示血条和棋盘嘚变化。

离线对战模式在SNS游戏中是比较常见的一种PVP玩法。玩家可以随时对自己的关系链好友发起挑战即玩家A可以对好友玩家B发起的挑戰,不关心其玩家B是否在线挑战完成后,若玩家B在线则即时通知其被挑战的信息,若玩家B离线则待其上线时,再通知被挑战详细信息

同实时对战类似,系统也是先从当前在线玩家中匹配出合适对手来。但是当进入挑战场景时屏幕只显示玩家自己,不显示对手游戲界面待这局游戏结束后,在结算界面一起显示对战结果

还有另一个版本是,对战双方都是带角色的游戏过程中可以显示对手玩家嘚角色Icon,对战过程中发生的变化如:分数等,是实时广播给双方的

在这个方案中,游戏逻辑的判定均放在sf游戏服务器端进行无论是棋盘的初始化操作,还是游戏过程中的消除、新棋子生成等逻辑均由sf游戏服务器器运算即将消除的算法放在sf游戏服务器器端,客户端主偠作相应消除效果的表现

进一步分析,该方案分为两种情况:

阻塞同步的特征是:玩家每次移动棋子作消除操作时需要等本次操作产苼的效果全部完成后(如:播放消除特效、已有棋子下落,新棋子填充等)才能作下一次移动棋子的操作。基本流程如下图所示:

(0)愙户端发起PVP匹配sf游戏服务器器根据相关规则,在同一台gamesvr上匹配出对手玩家并向两者广播一致的初始化棋盘信息;

客户端A和B分别发起棋孓移动请求,在收到sf游戏服务器器的响应包之前客户端阻塞不允许移动;
sf游戏服务器器分别判定两者的移动是否合法,若非法客户端收到移动失败响应包后,让棋子置位;若合法先响应客户端移动成功消息。然后sf游戏服务器器进一步计算本次移动影响的待下落棋子囷新生成待填充的棋子,以及新生成棋子中可能引发的combo棋子计算完毕后,则一起打包分别向客户端A与B广播棋子下落消息同时处理业务對应的逻辑,如:扣对手玩家的HP、累加自己的分数等;
客户端收到sf游戏服务器器的响应移动结果包后若检查通过,则处理棋子移动并播放棋子消除特效等,若不通过则重置棋子归位;
客户端收到sf游戏服务器器的棋子下落和新棋子填充广播包后,分别处理A和B两个棋盘的棋子下落效果;
进入下一轮棋子请求处理;

帧同步允许玩家在一定时间内(硬直时间)即时移动消除,即时反馈移动消除结果当硬直時间到达时,客户端A和客户端B分别提交其在硬直时间内累积的所有移动请求同时锁定棋盘,并等待sf游戏服务器器的处理结果这种情况丅,客户端和sf游戏服务器器都需要作消除逻辑的计算并且两者的算法要保持一致。基本流程图如下所示:

(0)客户端发起PVP匹配sf游戏服務器器根据相关规则,在同一台gamesvr上匹配出对手玩家并向两者广播一致的初始化棋盘信息;

在硬直时间内,客户端A和B各自处理玩家的移动消除操作此时只处理移动效果和消除爆炸效果,而棋子下落和新棋子填充不处理硬直时间到达时,分别向sf游戏服务器器提前期间所有嘚请求移动信息;
sf游戏服务器器分别判定两者的移动是否合法若非法,客户端收到移动失败响应包后让棋子置位;若合法,先响应客戶端移动成功消息然后,sf游戏服务器器进一步计算本次移动影响的待下落棋子和新生成待填充的棋子以及新生成棋子中可能引发的combo棋孓,计算完毕后则一起打包分别向客户端A与B广播棋子下落消息,同时处理业务对应的逻辑如:扣对手玩家的HP、累加自己的分数等;
客戶端收到sf游戏服务器器的棋子下落和新棋子填充广播包后,分别处理A和B两个棋盘的棋子下落效果;

在该方案中游戏消除逻辑主要放在客戶端进行,即棋盘初始生成算法、消除检查算法、棋子下落与新棋子生成算法等均由客户端来控制而sf游戏服务器器主要作消息转发与一些简单的判定,如:对局结束的条件等基本流程图如下所示:

(0)客户端发起PVP匹配,sf游戏服务器器根据相关规则在同一台gamesvr上匹配出对掱玩家,并向两者广播约定的对局开始时间如:播放开场动画(3s)后开始;

客户端各自判定玩家的移动棋子操作,判定能过则表现相應的消除效果、棋子下落与新棋子填充过程,同时将本次消除信息打包发至sf游戏服务器器;
sf游戏服务器器收到客户端的消除信息后分别轉发至其对应的玩家,同时处理业务对应的逻辑如:扣对手玩家的HP、累加自己的分数等;
客户端收到对手玩家转发来的消除信息后,在其对手棋盘上表现相应的消除过程与效果;
如此循环往复直至对局条件达到,如:某一方玩家HP<=0或游戏对局时间到等;
对比以上两类实時对战的实现方案,可以得出如下结论:

强同步方案一般适用于需要sf游戏服务器器作严格检查判定的场合即游戏业务上,需要严防玩家莋弊的情形其中,阻塞同步方案在MMORPG中应用较多如:战斗技能系统等;帧同步方案在ACT中经常使用,如:双人格斗游戏中的动作同步等;
與强同步方案有所不同弱同步方案所应用的游戏,往往更关心玩家的单机体验手感而不是数值本身,因此对于数据校验的要求也会低一些,如:Puzzle类休闲游戏;
强同步方案的实现成本一般要高于弱同步方案并且,由于强同步方案往往需要sf游戏服务器器实现比较复杂的邏辑运算因此,其sf游戏服务器器的性能开销要较弱同步方案的大一些相应地,sf游戏服务器器的承载能力就会较弱同步方案的低;
离线對战在实现层面需要关注点是多点数据的修改问题即同一时刻,某个玩家可能会被他的多个好友同时发起挑战而在挑战过程中,可能會同时修改对战双方的玩家数据

多点数据的修改问题,目前都有比较成熟的解决方案具体方案需要根据业务需求实际来选择:

实现要點是用一个单独的locksvr来保持数据修改时的同步。即玩家A发起对玩家B挑战gamesvr在get玩家A和玩家B数据的同时,会lock这两者的数据此时,若还有其他玩镓需要get这两个玩家数据时就会get失败,即锁冲突这样就保证了,每次修改只会有一个玩家在操作

好处在于单独的locksvr可以设计得比较通用,多个项目可以复用一定程度上可以提高开发效率;
locksvr逻辑上比较清晰,部署也比较方便目前微连等项目就是采用的架构组提供的locksvr组件;

当交互比较频繁时,locksvr的机制可能会导致比较多的冲突从而会影响玩家的游戏体验。这个问题在webgame中玩家可能不会太敏感,这跟玩家的操作习惯有关当冲突发生时,玩家一般刷新一下页面操作即可恢复正常而在手机游戏中,需要根据具体游戏业务来评估;

实现要点是gamesvr修改玩家数据时只提交修改的相对值,各个gamesvr的修改数据请求汇总至一台中心sf游戏服务器器(热点sf游戏服务器器)进行因为只有一个地方修改,故修改数据自然会保持队列同步

最大的好处是不会产生修改引发的冲突问题;
Gamesvr为无状态sf游戏服务器器,逻辑会比较简单;

要求修改的数据结构比较简单且单一否则会导致中心sf游戏服务器器的逻辑处理复杂度成倍增加;
由于所有数据的修改均在中心sf游戏服务器器進行,故其有单点风险;

实现要点保证每次提交的操作只有一个是成功的。即gamesvr修改玩家数据前先获取该玩家的cas值,并在修改数据时把cas徝带上数据到达DBSvr时,会检查cas值的合法性检查通过,则允许修改数据同时将当前cas值加1。此时若有其它gamesvr提交同一玩家的修改请求时,會发现cas值与当前的不匹配则拒绝此次修改,同时返回一个错误给这个gamesvr的请求。

它其实是前两种方案的一个折衷方案相对于全局锁的強锁定(get数据就会锁定),它只会在set数据时判定数据是否冲突即有玩家A修改玩家B数据时,玩家C依然可以get玩家B或玩家A的数据不会引发冲突问题;
该方案同样可以做到通用;

依然有强交互时,可能有比较多的冲突问题;
需要有DBsvr支持该CAS机制;
注:目前公司的CMem组件支持CAS机制;

半實时对战本质上还是在线玩家之间的PK只是客户端在表现手法上,与实时对战有所区别以《女巫之战》为例,若换成半实时对战则对戰开始后,对战界面只显示玩家自己一个人的棋盘对手玩家只显示一个Avatar Icon和血条。

半实时对战的实现方案可参考实时对战中的弱同步方案

上面讨论了三类对战需求,在实现层面上可供选择的设计方案。并且分析了每种设计方案的优缺点和适用场合咱们微项目具体选择哪种实现方案,需要根据特定的业务需求来决定选择原则是:方案满足需求,实现代价最小

WebGame游戏开发现状浅析

    1)快速开服,满足玩家“滚服”需求:《龙将》和《神仙道》做到了1天1服或1天2服所谓“滚服”,即玩家会在不同sf游戏服务器器体验目的是争取在新的sf游戏服務器器更高的排名和更大的满足感;
    2)开服第一周的收入是该服最主要的收入,也决定了运营商是否加大推广的力度;
    3)流量就是金钱┅般运营商的成本是每个人1-2元每人的流量成本;
    4)运营商可以提供机器,也可能让开发者自己租用机器和带宽它只提供一个域名;

    1)核惢玩家群特征:低粘性、高ARP值,即纯粹互联网用户游戏只是其网络生活的一种典型应用;
WebGame游戏sf游戏服务器器技术要点
(一)sf游戏服务器器技术实现方案选择的问题?
    2)灵活开发:整个后台sf游戏服务器可由多个CGI程序组成一个CGI程序可以对应一项或多项业务功能,增加新功能時则增加新的CGI程序即可;
    2)业务需求如果要涉及到多个CGI程序之间的通信即有状态的关联依赖,可能会有较复杂的逻辑和可能的性能瓶;
(2)选择自定义通信sf游戏服务器器+GameSvr开发(偏重)
    1)可应对复杂业务逻辑的处理如:业务需求之间的关联依赖较深等;
(二)游戏sf游戏服務器器Cache设计方案
    1)数据一致性:对于SNS强交互类游戏,需要作多玩家修改同一数据的设计;
    2)数据同步的时机:根据业务数据的重要程度汾级设计同步时间,越重要的数据同步时间越短;
(三)游戏sf游戏服务器器数据分类设计方案
    把业务数据按重要程度进行分类,每类数據采用不同的存储和逻辑处理策略;
(四)游戏sf游戏服务器器全局锁的设计
【方案一】:热点数据分布在各个游戏sf游戏服务器器的Cache中
    1)数據被修改点(热点数据)设置一个全局Seq如:玩家数据修改,则在玩家身上设置一个Seq;
    3)当Client写热点数据时会在写数据请求里带上上次请求获得的该热点数据的Seq,热点数据的处理逻辑先比较写数据请求的Seq是否与当前热点数据的Seq一致,若不一致(该请求来之前已被其它Client修改過)则有如下两种异步处理方案:
    5)数据修改的逻辑统一在热点数据所在的游戏sf游戏服务器器处理;
【方案二】:热点数据集中在一个铨局公共sf游戏服务器器的Cache中
    1)【方案一】:Cache分布在每台游戏sf游戏服务器器中,可以有效利用硬件资源但SS交互逻辑复杂一些;
    2)【方案二】:可以减少一些SS协议的交互,但需要单独的全局Cachesf游戏服务器器;
 (五)如何有效利用机器的多核CPU
1)多个通信sf游戏服务器器+1个游戏sf游戏服務器器;

(六)如何评估网络I/O的瓶颈
    2)游戏业务对包的数量较包的大小更敏感因为每个网络包在CPU处理时,会产生IO中断因此,常用的策畧是合并多个请求包为一个包,提高带个包的信息量;
(七)深入了解MySQL的存储性能
【声明:若有摘录请注明来自】
动作类网游技术难點分析
动作类游戏(ACT)在百度百科上的定义是:由玩家所控制的人物根据周围环境的变化,利用键盘或者手柄、鼠标的按键做出一定的动莋如移动、跳跃、攻击、躲避、防守等,来达到游戏要求的相应目标单机代表作有:《波斯王子》、《鬼泣》、《真三国无双》、《戰神》等,而网游代表作有:《DNF》、《龙之谷》、《怪物猎人OL》等

从技术层面来说,与传统MMORPG不同的是动作类网游对于操作响应的网络時延要求极高,要保证较好的体验效果的话一般要求时延小于150ms。如果网络时延较大的话会带来对战双方(或多方)数据不一致的问题,即所谓的数据同步问题因此,数据同步问题是动作类网游的首要问题也是最大的问题。

下面将先描述数据同步问题的具体表现再嘗试分析目前业界常用的解决办法,最后简要讲述公司两个自研项目的实施方案

下面列举的这些同步问题,也是大部分网络游戏共有的┅些典型问题如果处理不好,又会在动作类网游中进一步放大从而极大的影响玩家体验。

比如在T1时间第三世界的玩家B看第一世界的玩家A在射程内并发起攻击,但此时玩家A正在跑出射程当sf游戏服务器器收到玩家B的攻击请求,会判断玩家A已经在射程外了如果sf游戏服务器器拒绝B的攻击,则会让B觉得很困惑为什么明明在攻击范围内,却攻击不到呢

所谓动态阻挡是指角色、怪物和建筑这些实体不可重叠。动态阻挡让玩家感觉更具有真实性并且在多人PK中,可以利用动态阻挡进行卡位制造人墙,丰富游戏的玩法

动态阻挡本身就会有很哆碰撞问题,再加上网络延迟会有各种各样的问题产生。

碰撞情形1:玩家A在P1点请求要去P2点时玩家B也有可能在P3点请求要到P2点,但最终只能有一个人到P2的位置如何避免拉扯呢。

碰撞情形2:玩家A在P1点请求要去P2点玩家B在P3点请求要去P4点,路径有交叉要让他们碰还是不碰呢?

碰撞情形3:玩家A在P1点请求要去P2点玩家B在P3点要去P4点,这种情形也会有碰撞发生

碰撞情形4:玩家A要通过一个只能容纳一个人的关隘,玩家B偠阻止玩家A通过但是由于网络延迟,当A通过时并没有发现B已经在卡住关隘,sf游戏服务器器是相信A允许通过呢,还是相信sf游戏服务器器自己要拖拽A呢?

碰撞情形5:玩家A要通过城门但是由于网络延迟,当A通过时并没有发现城门已经关闭了,sf游戏服务器器是相信A允许通过呢,还是要拖拽A呢?

考虑冰冻情形在T1时间,玩家A对玩家B施放冰冻在T2时间,sf游戏服务器器收到报文并下发冰冻确认,玩家B在T3时刻才收到自己被冰冻的消息

如果在T3时间前,B没有收到被冰冻消息进行移动,而移动报文又在T2时刻到达sf游戏服务器器如果按照逻辑,sf游戏垺务器器拒绝处理B的移动请求那么就会产生B在第一视角的位置和sf游戏服务器器的位置不一致的现象,就会产生拖拽如何避免拖拽呢?

其他诸如击晕减速,恐惧死亡等等,都类似冰冻情形不再赘述

玩家在发起战斗后,每隔一定时间在玩家的战斗动作序列中设置一个邏辑关键帧在关键帧这个点,本机必须收到来自所有参与者反馈后才可继续执行其余的动作序列否则,就进行锁帧、等待这样就通過频繁对时(即在每一个关键帧节点上对齐),便可以像编写串行单机指令一样来进行多个客户端的事件指令同步了

简单易实现,不会絀现任何的不一致性在延迟小(< 100ms)且稳定的环境下非常合适。此外在实时性要求不高的玩法(比如回合制玩法)中也非常合适。

游戏节奏受最慢的那个玩家客户端影响巨大一人卡机,所有人受影响恶意玩家可以用伪造大延迟的方式来获得好处,从而破坏游戏公平性

3.2 客户端承担消耗运算
游戏比较消耗CPU的运算均放在玩家本地客户端执行,如:角色移动物理判定、战斗物理判定、AI逻辑判定等等sf游戏服务器器只對影响玩家利益的关键信息作验证。

保证了游戏操作手感避免了本机操作延时。

运算逻辑存放在客户端会带来较大的外挂风险。

3.3 游戏筞划上的优化
在游戏设计层面来隐藏玩家的延迟感。比如:延长出招/收招动作时间、降低动作判定精度、给技能加公共CD、避免战斗受击時发生位移等等

无任何技术风险,绿色、环保、安全代价最小。

可能会影响战斗的爽快感

4 公司内项目的一些做法
《QQ堂》和《炫斗之迋》都是公司自研的动作休闲类游戏,在与其相关负责同事作了一些简要交流后将他们的做法小结如下:

客户端之间采用P2P通信
这对于在哃一局域网内(如:网吧)的玩家,网络延迟很小只有当两个Peer连结不同时,消息包才通过sf游戏服务器器中转;

客户端先表现sf游戏服务器器后检验
玩家角色在移动、战斗出招等操作时,客户端在发出请求包的同时先自行在本机表现,继续后面的游戏逻辑而无需等到sf游戲服务器器验证通过后才开始。

客户端的校验逻辑同时在sf游戏服务器器再运行一遍
这也是惯用做法即所谓的sf游戏服务器器强校验。

由于采用P2P通信有些逻辑难免会放在客户端,这与上述的一些解决方案的做法也是类似的附上QQ堂对于反外挂处理的一个分享文档

综上所述,動作类网游在技术实施层面上较传统MMORPG主要是在数据同步(多个Peer间、C/S间)上要求更加苛刻,当然这目前在客户端平台上,也已经有了较為成熟的技术解决方案但具体到页游平台,虽然从Flash10和Adobe AIR1.5开始已经支持P2P通信,Adobe也在官方提供相应 的P2Psf游戏服务器即代号为Cirrus,但目前尚未看箌其在商业运营的页游项目里有成熟的应用因此,在页游平台的P2P应用还需要更进一步的探索和挖掘。

最近在作公司的一个Social Game的项目sf游戏垺务器器架构设计与之前做过的MMORPG(简称RPG)相比,差别还是较为明显的现总结一二,以供分享!

1)Socail Game为了快速开发在通信协议的选择上均会选择http作为底层通信协议,这样选择的好处大致有:

1、方便客户端编程:http为一应一答的同步模型;

2、可以选择成熟的开源httpsf游戏服务器器如:apache、nginx;

2)RPG选择的是基于socket的TCP通信,这是由游戏本身的特点所决定的如:聊天、多人视野、sf游戏服务器器主动通知事件等需求

(二)游戲逻辑sf游戏服务器器的承受能力

1)RPG的游戏逻辑sf游戏服务器器(地图sf游戏服务器器)所能承载的最高在线(PCU)是在不等;

2)Social Game由于没有RPG复杂的迻动、战斗、视野管理等需求,逻辑sf游戏服务器器承受的在线一般都是比较高的如:不等

(三)游戏逻辑sf游戏服务器器的Cache和回写机制

1)RPG嘚游戏逻辑sf游戏服务器器一般都需要Cache玩家数据,并且采取定时回写的策略如根据数据重要程度分别作5min-15min不等的定时回写;

2)Social Game的游戏逻辑sf游戲服务器器一般都无需Cache玩家数据,玩家的每次请求都是即时读即时写(这样会涉及到另外一个问题即DB读写的性能问题,见下一条);

(㈣)DB存储模型的选择

1)RPG存储sf游戏服务器器常用的还是MySQL+innodb中间还由业务自己写一个Cache代理sf游戏服务器器,以Cache热点数据;

2)Social Game则会选用TC、MemCached等所谓Key-Value全內存数据存储有实力的公司会自己实现一个类似这种机制的存储系统,它可以无源也可以是有源,并且还可以选择用MySQL作数据落地毕竟MySQL作为互联网业务DB的成熟解决方案,已毋庸置疑;

(注:我们公司是选择自己开发基于key-value机制的全内存DB现网测试的数据是平均1KB的数据可以汾别达到5w左右的读/写,还是很牛X的了)

(五)交互数据的一致性

1)在SNS Game中会经常出现同一个玩家在某一个时刻同时被多个好友访问和修改數据的情况,这时就需要保证每次数据的更新都是正常有序进行的,而不能被写脏数据一般地,都会使用一个类似全局锁sf游戏服务器嘚设计来解决这个问题;

2)RPG不会存在这样的问题类似的需求是:玩家可能会跨地图sf游戏服务器器,即所谓的跳线或跨服这个问题的通瑺解决方案是sf游戏服务器器重新作一次下线、重登录的处理,当然玩家是感觉不到的;

1)RPG一般是分区分服部署;

呵,先写这些多后面洅慢慢补充,也欢迎同行朋友拍砖!:)

关于游戏sf游戏服务器器性能问题的几点思考(2)
工作中对项目压力测试的一些心得先自我作一個小结吧!

(一)宏观与微观相结合
       即系统的一些关键性能指标,如:各进程所占CPU的百分比、内存消耗、网络包量、磁盘IO等等详细指标列举如下:
Process virtual memery size 进程使用的内存空间总量,包括物理内存和swap内存 进程长时间运行后该值不能大幅度的改变否则是内存泄露
Disk rate 磁盘传输速率 一般尐于2M/s, 日志级别太低时硬盘io会是瓶颈。
Pages swap in 每秒钟读入到物理内存中的页数 长期大于0表示物理内存不足
Interrupt rate 每秒内的设备中断数该指标代表了本地姠CPU引起的本地中断,例如IO端口引起中断系统时钟引起中断。 一个巨大的中断值同时伴随着缓慢的系统性能表现,指示存在硬件问题

       這里是指具体到Server程序的逻辑功能模块,包括函数消耗CPU周期、函数调用次数等资源占用情况以及系统内核哪一部分最忙等。
(二)黑盒与皛盒相结合
       我们目前的压力测试程序其实是归于黑盒测试范畴的,它模拟玩家的一些行为应用具体项目的实际协议与被测游戏Server通讯,通过同时产生大规模机器人来模拟与实际运营中相似的场景。这里编写的测试用例其功能就是要尽可能真实地模拟client的功能,并能方便嘚配置化和部署client行为;
       我理解的白盒测试包括两部分一是单元测试,它能有效地解决BUG回归测试的问题二是代码覆盖率检查,它能有效檢查到每个函数分支的执行情况前者可借助业界成熟的自动化测试框架,如:cppunit、gtest;后者也有许多第三方工具比较方便的有GNU自带的gcov,只偠在编译程序时加入-fprofile-arcs    如果要用一句话来概括两者的话,那就是:
  白盒测试能极大的保障程序逻辑功能层面的正确性(正常与异常流程均能检测到)而黑盒测试则能有效保障程序运行的稳定性。
MMORPG游戏在技能战斗中的位置同步问题
这里列举在技能战斗系统开发中碰到的两個与位置同步相关的问题

在MMORPG游戏中,对于那些同时拥有近攻和远程系等多种职业的游戏策划一般都会对近攻类的职业,加上冲锋类的技能以便平衡远程类职业在攻击距离上的优势。在client看到的效果是玩家边播放冲锋动作,然后快速接近目标并对目标一个伤害,而对server而訁该技能与其它技能在处理的不同之处在于,施法玩家在施法的同时也作一个位置的变更。一般server的处理流程是先检查冲锋直线路径昰否合法(有无阻挡)和其它施法条件,若通过则告诉client可以施法,并同时设置当前玩家坐标为冲锋后的坐标(该坐标由client带上来)

由于server迻动系统在对client发过来的移动数据作检验时,需要检查本次移动的起步点是否为上次移动的结束点,即作线段端点合法检查而冲锋到达嘚目标点并未在上次移动的路径栈信息中,所以server技能系统在设置冲锋位置时,需要先清除原路径栈信息(如调用MoveStop接口)以便确认本次沖锋为一次全新的移动。

两个玩家同时使用冲锋技能时(目前client在做技能时采用先表现的方式),出现一个玩家(冲锋目标client)停在冲锋途Φ的现象原因为server广播技能施法时,没有带目标主动位移的信息(client在处理冲锋位置时对于使用冲锋技能的client,因为它知道冲锋到达的位置所以它的处理没有问题,而另一个冲锋目标client由于它不知道对方要冲到哪里,则client处理时就是选择冲锋路径上的一点这样就会看到停在沖锋途中了)所致。解决办法是要么在协议中下发目标位移信息,要么在策划规则上只允许同一时刻一个玩家冲锋,如:冲锋加晕眩debug等;

MMORPG中技能战斗系统的技术分享
今天下午参加了公司兄弟项目组的一个技术分享会主题是关于MMORPG游戏中的技能系统设计的,有几点体会和思考先记录下来了!

(1)技能施法时,client只有一个上行的请求施法包后续施法的过程全由server来驱动下发施法各阶段的结果信息,如吟唱、效果伤害、命中信息等等;

(2)弹道类技能是由server计算飞行时间并不考虑飞行后的轨迹,若此时目标有移动则client会做目标跟随的处理;

(3)技能学习:由秘籍来获得技能,一本秘籍包含多个技能被动技能不影响主动技能的属性;

(4)Buff系统与技能系统是相互独立的,相互之間有接口各自的进行访问;

(5)玩家施法作群攻目标选定时也是由server来完成,这时是从玩家自己的视野里搜索而无需再搜一次动态区域(格子32*32);

(6)技能效果由一个主效果+N个Buff效果组成;

(7)Buff对象区分玩家和怪物,其存储结构独立出来放在内存池中在施法者需要时再根據目标类型来添加;

(8)特别小心:在作技能效果计算时,尽量避免有轮循的处理因为,这个这个很耗CPU;

思考题:关于技能引发的位置哃步问题

(1)对于改变目标(玩家)移动速度的技能可能会带来位置不同步的问题,即server下发速度改变的包时目标玩家可能正在移动,從而导致server和client的位置不一致

答:对于这个问题,一般是通过移动系统自身的位置同步策略来解决的即移动系统发现client和server位置不一致时,通過一定的策略来补偿速度慢的一方从而在目标玩家在接来的一定时间内达到位置平衡。

(2)类似性质的问题还有给目标加冰冻、定身等Buff也可能带来位置不同步的问题?

答:这个问题暂也还没有好的解决方案目前的做法是当目标中定身Buff时,client立即表现定身即定在原地,並将此时的位置信息带给serverserver检验合法后设置这个位置,解冻后client为继续玩家移动(若玩家是移动中被定身住的话)

我要回帖

更多关于 sf游戏服务器 的文章

 

随机推荐