游戏服务器的定义和架设

游戏服务器的定义和架设

ID:14857197

大小:54.50 KB

页数:5页

时间:2018-07-30

游戏服务器的定义和架设_第1页
游戏服务器的定义和架设_第2页
游戏服务器的定义和架设_第3页
游戏服务器的定义和架设_第4页
游戏服务器的定义和架设_第5页
资源描述:

《游戏服务器的定义和架设》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、这是一个纯技术贴,以我做的mansterSLS作为基础,讲述该如何做一个mmorpg游戏服务器。最近心情不好写到重新入职为止。所有最新的代码可以在游戏服务器http://news.cyeee.com目录code,svn下载。说到网游服务器是最近火起来的,但最初的网游服务器几乎和单机游戏一样的古老那就是mudos。mudos是一个通过文字交流的古老的逻辑系统,有点类似聊天机器人,可以根据不同的客户端命令做出相应的回复,使用户维持在一个自我虚幻的环境,跟着故事情节的发展得到许多不同的命运体验。游戏服务器处理游戏的逻辑部分,为啥不是在客户

2、端呢?原因是游戏是一个完整的世界,所有事件都发生在这个世界里。既然是一个完整的世界那么这个世界发生的事件就要持续完整。这样所有事件都要记录在服务器供理论上所有客户端去查询。另一原因就是防止客户端篡改游戏世界的数据。请注意wow的客户没有加壳和任何通常的防止黑客的手段为什么呢?因为所有游戏世界的数据和行为都是发生在服务器。客户端的指令要经过逻辑判断,不合逻辑的指令会被判失败。一个简单的例子普通攻击指令执行过程大致是,客户端通过服务器查询看到某人,给服务器发送攻击指令,服务器计算攻击的结果,给客户端和他攻击的目标发送结果,并在服务端保存

3、对用的数据。这里无论通过任何客户端都可以给服务器发送指令甚至是模拟器。服务器会先判断一系列的先决条件,例如攻击距离,对方是否在线等等。通过判断后计算攻击结果,这里一系列的过程客户端是无法更改的全部在服务端完成,并把这些数据共享给对应的客户端。这里我们可以看到在客户修改这些数值没有任何意义,服务判断的依据不是客户端上保存的数据。到这里我们了解了游戏服务器就是一个大的数据库,这个数据库的特征描述如下:1,高度并发的读取和写入。2,数据字段不固定,可能在任何时刻增加或减少。3,不需要模糊查询的操作,所有数据查询都是对象为基础。等等剩下的还

4、没有想到。不过单从上面几点商用数据库可以pass了,即使号称对象数据库的PostgreSQL也不行,数据库的一大弊病就是为了模糊查询需要所有对象共享数据字段,这样即使某个数据不使用某个字段也要共享。会浪费大量的数据空间。游戏里面对象之间的字段也完全没有共性可言。例如npc是一个对象,椅子也是一个对象,如果按hp,mp排序,要买椅子是hp,mp是零,要么是一个非常大的数值。因为椅子就没有hp,mp。如果npc和椅子放在数据库一个表里面椅子就要浪费mp,hp的两个段值。C/C++code?12345678typedefstructdob

5、ject{mapdata;///forshare,onlynetobjectusinguintptr_tindex;intptr_tx,y,z;size_tstamp;listview;910void*psp;}DOBJECT,*PDOBJECT;上面代码是我在游戏里对象的定义,由一个动态增加的map段存储游戏里的逻辑数据。下面讲到的数据和其他的系统相关会在稍后说到其他系统的时候详细介绍例如mp,hp,物品,任务等等,index是socket的索引在讲解网络系统的时候会讲到,x,y

6、,z是对象在空间的坐标,过段时间会加上方向。stamp,是时间戳为移动加的。view,是当前可见对象列表。psp,是当前对象在空间矩阵的位置。C/C++code?12345678typedefstructtobject{;public:uintptr_tid;PDOBJECTdata;pthread_mutex_thmutex;}TOBJECT,*PTOBJECT;这个结构是我称为cell的结构,是一个静态数组结构的一部分。静态数组结构在服务器被普遍使用目的是通过一个全局地址指针可以快速查到相应的数据结构。因为地址指针是全局静态分配

7、的任何情况下都不会访问失败,是对线程下交换数据最快的方式。我们看到这个结构有3部分组成,第一个是id是一个自增加整数值,每次给cell赋值新的对象都会加一,以区分被销毁的旧对象。humtex是互斥锁为了安全的访问cell内的数据对象,data指向的就是对象。一个对象的创建的过程如下C/C++code?1234567891011uintptr_tOBJECT::ObNew(char*obid,uintptr_tindex){PDOBJECTob=newDOBJECT;ob->index=index;ob->psp=0;ob->stam

8、p=0;///addobtog_obmapuintptr_tnob=0,no=0;for(size_tcursor=0;cursor

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。