网络游戏
dijinzhou
多年的linux C/C++编程,现在在从事网游后台的架构与开发,有兴趣的同行,可以一起讨论讨论;
展开
-
网络游戏中的定时器设计
网络游戏中的定时器设计 最近在开发的网络游戏中尝试引入定时器的功能,比较几种常用的定时器算法之后,选择了Linux 的内核的定时器算法:时间轮算法。(Linux 的内核把定时器分为 5 组,每组的粒度分别表示为:1 jiffies,256 jiffies,256*64 jiffies,256*64*64 jiffies,256*64*64*64 jiffies,每组中桶的数量分别为:256,64,64,64,64,这样,在 256+64+64+64+64 = 512 个桶中,表示的范围为 2^32 )原创 2010-08-02 17:16:00 · 2805 阅读 · 0 评论 -
网络游戏中玩家在线数据的存取
<br /> 网络游戏中玩家在线数据的存取<br /> 一般而言,在设计网络游戏中玩家在线数据的存储时,都是在游戏服务器中使用共享内存来进行保存,然后定时把玩家的在线数据(如金钱,经验,等级,道具等)发送到后台的数据库服务器进行入库保存。这样做的好处是当游戏服务器当了之后,玩家的数据只会有几分钟的数据没有保存下来,从而最大成度的保证了玩家的益利。但是这样一来,对于后端的数据库服务器,保存在线玩家的数据所带来的IO相对来说,是比较高的。因为一个数据库服务器一般会保存多条线的数据。大概算下:假定一条线最高原创 2010-08-04 15:55:00 · 6728 阅读 · 1 评论 -
回合制的MMORPG中分离战斗
在想一个问题,在回合制的MMORPG中分离战斗成一个新的进程,使用多进程(或多线程)方式来提高游戏的并发性能。方法:先分成一个逻辑主进程和一个战斗主进程,战斗以外的操作处理都在逻辑主进程中完成,当发生战斗时,把角色的指针传给战斗主进程,并设置进入战斗标志。逻辑进程和战斗进程通过共享内存来共享数据。在战斗主进程中可使用多线程模式,根据机器的性能设置多线程的数量,一个战斗为一个session,一个线程处理多个session.在战斗过程逻辑主进程收到角色的消息时,不用立刻处理,而是把消息放入角色的消息队列(聊天信原创 2010-06-18 17:28:00 · 1081 阅读 · 0 评论 -
大规模服务设计部署经验谈
大规模服务设计部署经验谈:http://www.mvdirona.com/jrh/talksAndPapers/JamesRH_Lisa.pdf转载 2010-06-21 15:00:00 · 878 阅读 · 0 评论 -
网游中将聊天部分与游戏逻辑分离
考虑到现在的游戏服务器是在多CPU上运行的,为了更好的利用多CPU的功能,设想是将游戏中与逻辑关系不是很大的聊天部分分离出来,成为一个单独的服务器,从而提高游戏的业务处理速度,并且能充分利用CPU资源。聊天分离后做成一个聊天服务器,使用的策略是用空间换时间。会将所用到的相关数据都放入共享内存中,使用KEY值进行查找/增加/删除。通常的聊天服务器按聊天的类型可以分为:全服,国家, 地图, 同屏, 好友, 组队,帮派,私聊其中,对于地图,好友,帮派聊天消息,通过已建好的映射表,就可以快速分发聊天内容。对原创 2010-06-23 15:35:00 · 3014 阅读 · 2 评论 -
linux内存读写不加锁的一种实现方法
linux内存读写不加锁的一种实现方法<br />针对一个写,多个读的情况<br />在多线程或多进程的实现中,数据的共享一般是通过加锁或信号量来实现。<br />但这种方法的效率不是很高。一种可行的高效率的方法可以通过简单的CRC来实现。<br />具体的方法是:<br />1.在写一段内存数据时计算CRC(可以根据数据需求选择不同的CRC算法);<br />2.读数据时检查CRC,当CRC不原创 2010-09-19 18:55:00 · 1525 阅读 · 0 评论 -
网络游戏服务器开发过程中小对象内存管理
<br /> 网络游戏服务器开发过程中小对象内存管理<br /> linux关于内存的分配管理中,有一个叫slab的内存分配机制,为了避免重复初始化对象,slab分配模式并不丢弃已分配的对象,而是释放但把它们依然保留在内存中,当以后又要请求分配同一对象时,就可以从内存中获取而不用进行初始化。<br />在网络游戏的开发过程中,后台服务器因为内存碎版管理和效率的要求,一般不会在运行时进行内存的动原创 2010-09-26 10:31:00 · 1405 阅读 · 0 评论 -
网络游戏中服务器和客户端的视图数据的同步
<br /> 网络游戏中服务器和客户端的视图数据的同步<br />在网络游戏中,服务器和客户端的视图数据的同步,是比较频繁一个操作,而且在一个进程(只有一个游戏逻辑进程)中占用的CPU也在10%以上。<br />在视图数据的处理上,一般的算法有9宫格,8叉树等算法。根据游戏的需求来决定。<br />因为在服务器和客户端的视图数据的同步时,放在服务器端内存的中视图数据是只读(此视图数据会被游戏逻辑主进程进行修改操作)的,这样就可原创 2010-09-22 17:10:00 · 1777 阅读 · 0 评论