自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 网络游戏服务器开发过程中小对象内存管理

<br />                                                        网络游戏服务器开发过程中小对象内存管理<br />    linux关于内存的分配管理中,有一个叫slab的内存分配机制,为了避免重复初始化对象,slab分配模式并不丢弃已分配的对象,而是释放但把它们依然保留在内存中,当以后又要请求分配同一对象时,就可以从内存中获取而不用进行初始化。<br />在网络游戏的开发过程中,后台服务器因为内存碎版管理和效率的要求,一般不会在运行时进行内存的动

2010-09-26 10:31:00 1405

原创 网络游戏中服务器和客户端的视图数据的同步

<br />                                          网络游戏中服务器和客户端的视图数据的同步<br />在网络游戏中,服务器和客户端的视图数据的同步,是比较频繁一个操作,而且在一个进程(只有一个游戏逻辑进程)中占用的CPU也在10%以上。<br />在视图数据的处理上,一般的算法有9宫格,8叉树等算法。根据游戏的需求来决定。<br />因为在服务器和客户端的视图数据的同步时,放在服务器端内存的中视图数据是只读(此视图数据会被游戏逻辑主进程进行修改操作)的,这样就可

2010-09-22 17:10:00 1777

原创 数据库设置中的数据分段

<br />                                                            数据库设置中的数据分段<br />方法一:使用号段进行分段比如QQ号段,10W一个段。在上层有号段路由表(扩展时只有数据单向流出)<br />方法二:模运算:X%10。当模改变时,DB中会有数据的流入和流出。<br />方法三:接区域进行划分。

2010-09-19 18:56:00 2134

原创 linux内存读写不加锁的一种实现方法

                                                         linux内存读写不加锁的一种实现方法<br />针对一个写,多个读的情况<br />在多线程或多进程的实现中,数据的共享一般是通过加锁或信号量来实现。<br />但这种方法的效率不是很高。一种可行的高效率的方法可以通过简单的CRC来实现。<br />具体的方法是:<br />1.在写一段内存数据时计算CRC(可以根据数据需求选择不同的CRC算法);<br />2.读数据时检查CRC,当CRC不

2010-09-19 18:55:00 1525

转载 boost中的ordered_free为什么需要做排序

<br />boost中的ordered_free为什么需要做排序<br /> <br />因为要用到boost中的pool,所以在网上查了下资料并整理如下:<br /><br />Boost中的ordered_free则假设FreeNodeList是有序的,因此会遍历FreeNodeList把要释放的结点插入到合适的位置。<br />首先通过find_prev寻找要加入的block在当前free list链中的位置,再将之加入free list,以使列表有序<br />代码如下:<br />find_pr

2010-08-10 14:14:00 1117

原创 linux 下distcc安装及配置

<br />linux 下distcc安装及配置<br /> <br />一 服务器端配置:<br />安装:./configure; make; make install;<br />运行:distccd --daemon --allow 10.7.0.0/16(0.0.0.0/0表示允许所有主机连接)<br /><br />二.客户端配置:<br /> 安装好distcc;<br /> 配置:在当前用户的HOME目录下面,打开.profile文件,加入如下内容:<br />  export CXX="d

2010-08-05 17:43:00 5081

原创 网络游戏中玩家在线数据的存取

<br /> 网络游戏中玩家在线数据的存取<br />    一般而言,在设计网络游戏中玩家在线数据的存储时,都是在游戏服务器中使用共享内存来进行保存,然后定时把玩家的在线数据(如金钱,经验,等级,道具等)发送到后台的数据库服务器进行入库保存。这样做的好处是当游戏服务器当了之后,玩家的数据只会有几分钟的数据没有保存下来,从而最大成度的保证了玩家的益利。但是这样一来,对于后端的数据库服务器,保存在线玩家的数据所带来的IO相对来说,是比较高的。因为一个数据库服务器一般会保存多条线的数据。大概算下:假定一条线最高

2010-08-04 15:55:00 6728 1

原创 网络游戏中的定时器设计

网络游戏中的定时器设计    最近在开发的网络游戏中尝试引入定时器的功能,比较几种常用的定时器算法之后,选择了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

原创 Visual C++内存泄露检测—VLD工具使用说明

<br />Visual C++内存泄露检测—VLD工具使用说明<br />一.        VLD工具概述<br />Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;  可以得到泄露内存的完整数据;可以设置内存泄露报告的级别;并且是开源免费的。<br /> <br />二.        VLD下载<br />http://www.codeproject.com/

2010-07-21 16:58:00 8064 1

原创 quake3 源码分析(六)

<br />quake3 源码分析(六)<br />--网络数据传输与接收<br /><br /><br />数据结构:<br />#define    MAX_LOOPBACK       16<br /> <br />typedef struct {<br />       bytedata[MAX_PACKETLEN];// MAX_PACKETLEN = 1400<br />       int          datalen;<br />} loopmsg_t;<br /> <br />type

2010-07-20 17:43:00 1767

原创 quake3源码分析(五)

<br />quake3源码分析(五)<br />启动主菜单<br /><br /><br />int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {<br />              Sys_CreateConsole();//创建一个用一输出的窗口<br />              Com_Init( sys_cmdline );//相关的初始化操作,加载

2010-07-19 18:45:00 1994

原创 quake3 源码分析(四)

<br />quake3 源码分析(四)<br />--Render<br /> <br /> <br /><br /><br />void CL_InitRef( void ) <br />{<br />       refimport _t     ri;<br />       refexport_t     *ret;<br />           ri.Cmd_AddCommand = Cmd_AddCommand;<br />…<br />       <br />ret = GetRefAP

2010-07-15 15:54:00 2641

原创 Quake 3 源码分析(三)

<br />Quake 3 源码分析(三)<br />--键盘响应事件之启动主菜单<br /> <br /><br />源程序中的调用关系如下:<br />WinMain()àCom_Frame ()àCom_EventLoop()à(调用Com_GetEvent得到一个event,根据evType调用函数) CL_KeyEvent()àVM_Call( uivm,。。。)à(如果不存在uix86.dll,则调用VM_CallCompiled函数) vm->entryPoint()à(ui_main.c文件

2010-07-14 18:22:00 2136

原创 Quake 3 源码分析(一)

<br />Quake 3 源码分析(一)<br />--目录结构<br />quake3(雷神之锤III)是由id Software采用id Tech3引擎制作的多人连线第一人称射击游戏(FPS),id很早以前就公布了源程序。可以要网上找到源码的下载。<br /><br />源码目录说明:<br />引擎相关<br />       /botlib    有关bot的信息<br />       /bspc              bsp计算程序<br />       /client     客户端相

2010-07-13 11:40:00 5630 1

原创 Quake 3 源码分析(二)

Quake 3 源码分析 命令与实现 游戏代码

2010-07-12 18:57:00 3459

原创 Mangos源码分析(三)

Mangos源码分析                                                           --登陆服务器Src/game目录/// Read the client transmitted datavoid WorldSocket::OnRead(){TcpSocket::OnRead();        switch (_cmd)        {            case CMSG_PING:            {                _

2010-07-09 17:47:00 3089

原创 Mangos源码分析(二)

Mangos源码分析--Launch the mangos serverint main(int argc, char **argv){    // - Construct Memory Manager Instance    MaNGOS::Singleton::Instance();    //char *leak = new char[1000];                          // test leak detection    ///- Command line parsing

2010-07-08 15:19:00 4868 1

原创 linux下mockpp安装使用说明

<br />mockpp安装使用说明<br />一、安装说明:<br />1、从网上下载源码包<br />    网站URL:http://mockpp.sourceforge.net/<br />2、进行安装<br />   # ./configure<br />   #make<br />   #make install<br />  如果使用<br />   # ./configure --enable-cppunit<br />   #make<br />   #make install<br />

2010-07-07 17:45:00 1799 1

原创 Mangos源码分析(一)

<br />Mangos源码分析<br /><br />------realmd登陆服务器<br /><br />Realmd主程序<br />/// Launch the realm server<br />int main(int argc, char **argv)<br />{<br />      //输入参数分析,”-c”指定配置文件<br />      //sConfig.SetSource(cfg_file),加载指定的配置文件<br />      //进行版本号检查<br />   /

2010-07-07 13:05:00 5336

原创 linux gcc 预编译

<br />linux gcc 预编译 <br />命令:gcc -E test.c -o test.i<br /> <br />预编译主要完成以下功能:<br />1.删除所有的注释“//”和“/**/”;<br />2.删除所有的“#define”,展开所有的宏定义;<br />3.处理所有的条件预编译指令;<br />4.处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置,这一过程是递归进行的;<br />5.添加行号和文件名标识;<br /> <br />例:<br />源文

2010-07-06 18:31:00 4546 2

原创 C语言中函数表达式

C语言中函数表达式:对于函数Function(expr1, expr2)1.在函数调用之前,对函数所有参数求值必须全部完成;这包括:如果函数参数是表达式,那么,表达式所产生的任何副作用也得全部完成。2.一旦一个函数开始执行,调用者函数中的表达式将不会开始求值继续求值,直至调用函数执行结束,函数执行永远不会交叉进行。3.如果函数参数是表达式,这些表达式通常可以接任何次序求值,包括交叉求值,除非另有其它规则限制。

2010-07-05 21:36:00 3756

原创 C++中重定向stderr

<br />C++中重定向stderr:<br /> <br />FILE *pfStream;<br />pfStream = freopen("freopen.out", "w", sdterr);//实现重定向,把预定义的标准流文件定向到指定的文件中<br />if(NULL == pfStream)<br />{<br />    fprintf(stdout, "error");<br />}<br />else<br />{<br />    fprintf(stdout,"successful

2010-07-05 21:14:00 1777

原创 C语言中输出函数任意参数的实现

<br />C语言中输出函数任意参数的实现:<br />#include <stdarg.h><br /> <br />int MyError(char *pFormate,...)<br />{<br />    va_list ap;<br />    va_start(ap,pFormate);<br />    fprintf(stderr, "error:");<br />    <br />    int iRet = vfprintf(sdterr,pFormate,ap);<br />   

2010-07-05 21:04:00 1515

原创 c语言中的“时光倒流--非局部跳转longjmp

<br />c语言中的“时光倒流”--非局部跳转longjmp<br /> <br />#include <setjmp.h><br />jmp_buf a;<br />longjmp(a,1);//让程序的执行流回到当初setjmp返回的时刻,并且<br />返回由longjmp指定的返回值(longjmp第二个参数,这里是值1)<br />setjmp(a);<br />void JMP()<br />{<br />  longjmp(b,1);<br />}<br />int function()<b

2010-06-29 13:57:00 848

转载 cpu亲合度(affinity)设置

<br />可以在linux下使用man sched_setaffinity查看相关使用说明<br />long sched_setaffinity(pid_t pid, unsigned int len, <br />                  unsigned long *user_mask_ptr);<br />long sched_getaffinity(pid_t pid, unsigned int len,<br />                  unsigned long *us

2010-06-25 16:35:00 1749 1

原创 网游中将聊天部分与游戏逻辑分离

考虑到现在的游戏服务器是在多CPU上运行的,为了更好的利用多CPU的功能,设想是将游戏中与逻辑关系不是很大的聊天部分分离出来,成为一个单独的服务器,从而提高游戏的业务处理速度,并且能充分利用CPU资源。聊天分离后做成一个聊天服务器,使用的策略是用空间换时间。会将所用到的相关数据都放入共享内存中,使用KEY值进行查找/增加/删除。通常的聊天服务器按聊天的类型可以分为:全服,国家,  地图,  同屏,  好友,  组队,帮派,私聊其中,对于地图,好友,帮派聊天消息,通过已建好的映射表,就可以快速分发聊天内容。对

2010-06-23 15:35:00 3014 2

转载 mysql数据同步原理

MySQL同步机制基于master把所有对数据库的更新、删除等)都记录在二进制日志里,MySQL同步功能由3个线程(master上1个,slave上2个)来实现。执行 START SLAVE 语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一个线程来把日志的内容发送到slave上。这个线程在master上执行 SHOW PROCESSLIST 语句后的结果中的 Binlog Dump 线程便是。slave上的I/O线程读取ma

2010-06-22 15:13:00 2913

转载 大规模服务设计部署经验谈

大规模服务设计部署经验谈:http://www.mvdirona.com/jrh/talksAndPapers/JamesRH_Lisa.pdf

2010-06-21 15:00:00 878

原创 回合制的MMORPG中分离战斗

在想一个问题,在回合制的MMORPG中分离战斗成一个新的进程,使用多进程(或多线程)方式来提高游戏的并发性能。方法:先分成一个逻辑主进程和一个战斗主进程,战斗以外的操作处理都在逻辑主进程中完成,当发生战斗时,把角色的指针传给战斗主进程,并设置进入战斗标志。逻辑进程和战斗进程通过共享内存来共享数据。在战斗主进程中可使用多线程模式,根据机器的性能设置多线程的数量,一个战斗为一个session,一个线程处理多个session.在战斗过程逻辑主进程收到角色的消息时,不用立刻处理,而是把消息放入角色的消息队列(聊天信

2010-06-18 17:28:00 1081

转载 ROSE反向工程(从源程序到类图)

·         1.在组件视图中创建一个组件(component)2.点右键并选择Open Specification3.选取General,选取合适的Stereotype,并在lanaguage中选定语言,比如ANSI C++4.点OK5.  5.在罗辑视图中创建一个能代表这个视图的包。例如MusicDJ7.打开ROSE的Tools菜单下的ANSI C++,并选取Open ANSI C++ Specification...8.在打开的对对话框中的File页面,选取源码的根目录文件(.cpp or .h

2010-06-17 11:00:00 701

原创 yacc 语法分析

 语法定义用于定义标记序列以及应得到的结果;yacc 语法定义的基本结构是定义预期的标记序列 Yacc 文件格式:关于yacc配置文件的一例子:%{#include "stdafx.h"int yylex(void);void yyerror(char *s);%}%%/* beginning of rules section */%%int analyze(const char *pszFile){    //。。。}%{    /* 全局函数及头文件声明*/%}/*标记定义*/%%/* Parsing

2010-06-11 14:51:00 1453

转载 vim 常用命令

移动光标类命令 h 光标左移一个字符 (Backspace) l 光标右移一个字符 (space) k 光标上移一行 j 光标下移一行 (Enter) 0 (注意是数字零)光标移至当前行首 $ 光标移至当前行尾 nG 光标移至第n行首 n$ 光标移至第n行尾 gg 光标移至文件第1行 G 光标移至文件最后1行 屏幕翻滚类命令 Ctrl+u 向文件首翻半屏 Ctrl+d 向文件尾翻半屏 Ctrl+f 向文件尾翻一屏 Ctrl+b 向文件首翻一屏 插入文本类命令 i 在光标前 I 在当前行首 a 光标后 A 在

2010-06-08 15:09:00 418

原创 lex词法分析

lex 工具使用一个配置文件来生成相应的 C 源代码,然后,可以用它来创建独立的应用程序,或者在您自己的应用程序中使用它。配置文件定义了需要在待分析的文件中查找的字符序列,以及当发现该序列之后应该进行什么操作。配置文件格式为:1.代码中的第一块由%{...%} 定义,表示将其中的文本插入到生成的 C 源代码中;2.代码中的第二块由 %% 序列标识,其中包含了要识别的字符串输入和相应结果的定义;如:"if“      return IF;   在 yacc 中,将使用这个名称来建立相应的语法。3.用户子程序部

2010-06-08 14:40:00 1091 1

原创 mysql一个连接的处理效率

硬盘的平均存取时间由寻道时间和读写时间两部分构成,假定一个7200转的硬盘平均存取时间为10ms.再假定机器内存足够,可以把所有的索引数据cache起来,不计mysql查询索引数据的时间。则理论上的每秒处理数(以单表的select为例)=1000ms/10ms=100(个)

2010-06-08 09:24:00 933 1

原创 CPPUnit使用说明

CPPUnit使用说明2008-7-29一.安装1.  下载:http://cppunit.sourceforge.net2.  安装先将压缩包上传到linux上,解压缩后进行安装:#./configure#make#make install二.CPPUnit使用1.  需要在make文件中加入-lcppunit(及-ldl),把CPPUnit的库包含进来;

2009-09-12 09:12:00 742

原创 使用valgrind进行后台服务器的性能优化

使用valgrind进行后台服务器的性能优化2008-04-30一.        Valgrind安装说明:先从http://valgrind.org/上将安装包down下来(使用3.2.0及以上版本),然后进行安装:./configure   make   make install (as "root" if needed) 二.        使用valgri

2009-09-12 09:01:00 6054

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除