
代码历程
SuperKuku
在从事游戏开发的6年时间里面,涉及的内容包括运营平台、GM工具、MMORPG、FPS游戏。游戏都已经上线并且稳定运营中,单服务器的承载量在1万-5万之间。
展开
-
chrome环境搭建
depot_tools: 由于中国网络导致下载失败。重新fetch提示错误。问题在于fetch.py的Checkout::exists判定了depot_tools\.gclient, depot_tools\src,depot_tools\.gclient是否存在。如果存在删除了就可以重新开始。 错误提示:uour current directory appears to already原创 2015-10-10 10:34:49 · 4123 阅读 · 0 评论 -
window 时间获取
在windows中有几种类型的时间函数time(): 获取从1970.1.1 0:0:0开始的秒数。精度秒timeGetTime(): 获取服务器开机以来的时间。最长49.7天。精度系统时间片精度,基本保证时间精度在1-16之间。基本上是1ms左右GetTickCount(): 获取服务器开机以来的时间。最长49.7天。精度系统时间片精度。win7 15-16msQueryPerf原创 2013-05-22 18:21:42 · 812 阅读 · 0 评论 -
vs2010析构过程与虚函数指针
在vs2010中,调用析构函数后,该对象的虚函数指针,会指向基类的虚函数表。比如:class TBase{public:virtual void TT(){printf(__FUNCTION__"\n");};}class TChild : public TBase{public:virtual void TT(){printf(__原创 2013-05-20 14:41:14 · 939 阅读 · 0 评论 -
有关vs2010 release版本调试this指针问题
这里会涉及两个问题,一个是如何实现vs2010调试的问题,一个是调试时this指针可能错误的问题1.如何实现vs2010调试a.设置Properties->Linker->Generate Debug Info:Yes(/DEBUG)b.设置C/C++->General->Debug Information Format:Program Database(/Zi)这样就实现了rel原创 2013-05-02 21:42:42 · 1401 阅读 · 0 评论 -
获取成员函数地址3种方法
class IntTT{public: virtual void TV(){printf(__FUNCTION__"\n");};};typedef void (IntTT::*Func)();union{ long long addr; Func f;}ut;void main(){ ut.f = &IntTT::TV; void* p2 = (void*)&原创 2013-03-20 19:46:28 · 1531 阅读 · 0 评论 -
虚函数调用汇编
tP->TV();00F2167A mov eax,dword ptr [tP] // 把对象指针放入eax00F21680 mov edx,dword ptr [eax] // 对象指针地址的最前面放置着该对象的虚地址指针,取虚地址指针00F21682 mov esi,esp 00F21684 mov原创 2013-03-20 19:51:41 · 927 阅读 · 0 评论 -
从汇编看指针和引用
int i1 = 1, i2 = 2; int& ir = i1; int* ip = &i2; void* vp = (void*)((size_t&)(ip));00DF3CC4 mov eax,dword ptr [ip] 00DF3CC7 mov dword ptr [vp],eax void* vp1 = (void*)((size_原创 2013-03-21 11:18:30 · 1487 阅读 · 2 评论 -
智能指针
内存泄漏、野指针肯定是C/C++代码开发过程中需要处理的严重问题。在各种尝试后,技术上出现了智能指针。c++标准库、boost、tr1库中的智能指针包括auto_ptr、shared_ptr、scope_ptr。auto_ptr是最简单的智能指针。auto_ptr对象出了有效区的时候,或者其他的auto_ptr接管的时候。自动释放会调用指针的析构自动释放。所以智能指针就有几个问题:原创 2013-03-18 16:42:58 · 814 阅读 · 0 评论 -
VS2010 STL hashmap
版本是 V5.20:0009hashmap继承于_Hash,基本所有实现都是对于_Hash得封装。这里主要是阅读一下_Hash的代码流程。首先是hash_map声明template<class _Kty, class _Ty, class _Tr = hash_compare >, class _Alloc = allocator > > class hash_ma原创 2013-03-18 12:08:53 · 1974 阅读 · 0 评论 -
vs2012 STL vector
最近项目的开发库大量使用了STL,为了确认内存已经性能问题,只能拿起代码看看。vs2012使用的STL是由Dinkumware维护的P.J. Plauger STL版本。与侯捷大作的SGI STl差距还是很大的。而且vs2010开始,该版本进行了一些c++0x的优化,据说性能有不少的提升。所以拿起代码来看看吧。借侯捷的话说就是源码之前,了无秘密。先看使用最多的vector吧。初始化原创 2012-12-22 11:15:23 · 2518 阅读 · 0 评论 -
有关IOCP性能测试
环境:内网,中间间隔一个路由器服务器:CPU: Intel Xeon W3565 3.20G*4MEM: 4096M步骤:客户端IOCP直接发送当前的TickCount服务器IOCP在OnData里面直接回传客户端根据响应计算延时最后结果:每毫秒处理48个左右来回。之后有一个15-16ms左右的延时。结论:IOCP每个原创 2013-03-31 13:40:28 · 1450 阅读 · 1 评论 -
语音识别库整理
openEars是一个开源的语音识别+TTS库。可以在IOS下使用。 http://www.politepix.com/openears/tutorial/Julius是开源语音双向处理库,不过目前仅对日语支持比较好。 Linux和Windows下都可以使用。 http://julius.sourceforge.jp/en_index.phpSAPI原创 2013-03-29 10:23:06 · 3274 阅读 · 0 评论 -
float, int , int64计算性能
虽然说有了FPU和各种扩展指令集后,盛传浮点数的计算性能已经和整形非常接近了,只有几倍的CPU周期差距了。甚至都是一样1~2个CPU周期就计算完毕了。还有x64的cpu出来后,x64得寄存器对于64位的计算和32位的计算也是性能几乎相同了。时间是检验真理的唯一标准,现在实验如下:CPU: Intel(R) Core(TM)2 Duo CPU E7400 @ 2.80GHz (2原创 2013-03-12 10:53:24 · 3715 阅读 · 1 评论 -
C++ POD
最近由于同事在代码中对于memset的滥用,导致了服务器一系列的问题。所以接触到了is_pod.在此顺便了解了一下POD.总结如下:POD : 仅仅有Plain Old Data的类型就是POD类型.Plain Old Data包括如下:The actual definition of a POD type is recursive and gets a lit原创 2013-03-12 13:55:10 · 900 阅读 · 0 评论 -
SVN操作规范
1.目录branches 分支开发使用。目前还没有tags 目前没用trunk 主干开发使用,目前开发使用的目录Design 目前策划案所在路径Document 日报、排期所在目录Release 客户端版本所在目录ServerReleaseForClient 服务器版本发布路径CodeDev 目前主干代码所在路径Client 客户端代码所在目录Common原创 2013-02-22 09:41:45 · 836 阅读 · 0 评论 -
Buff系统框架设计
Buff的配置文件BufType: 1: 精神类Buf 2: 物理类Buf 3.元素类Buf 4.其他类Buf 5.被动类BufBufSubType: 1000-1999 精神子类 2000-2999.物理子类 3000-3999.元素子类 4000-4999.其他子类 5000-5999.被动子类。所以子类可以唯一标识一个Buff的类别 OppGroupId: 表明该Grou原创 2013-01-22 16:29:53 · 5095 阅读 · 0 评论 -
Overlap IO与IOCP对比
有关Overlap与IOCP的区别一直搞的不是很清楚。最近仔细分别用两种方式写了一次代码,总算搞清楚了。其实归结到就一句。IO完成后的回调处理是否支持多线程处理。区别很简单。在进行WSARecv,WSARecvFrom,WSASend,WSASendTo函数调用之后,如果使用Overlap IO,则需要使用WaitForMultiEvents把所有的Overlap的Event数组作为参原创 2013-05-31 09:38:53 · 2338 阅读 · 0 评论 -
有关可能在遍历中进行资源释放的资源释放过程设计
有关可能在遍历中进行资源释放的资源释放过程设计1.存在Tick,可以把释放的资源记录。在下一帧开始或者该帧结束的时候进行统一的释放class ActorManager{public:void Tick(){m_arActor.Tick();Clear();}void Free(Actor*){m_arActorWaitForFre原创 2013-06-14 16:02:13 · 849 阅读 · 0 评论 -
记录一下C++和C#中的字符串处理与编码格式的问题
下面是字符、字节、编码格式的基础知识:http://www.regexlab.com/zh/encoding.htm程序中涉及的会有几次的编码格式的转换:1. 代码文本,字符串是按我们文本设定的编码方式保存的2. 代码运行期间,字符串在内存中是以一种编码方式保存的3. 代码如果产生字符串输出,输出到问题的字符串不同的IO类会产生不同编码方式的保存,当然这个可以设置实现更改因为同一个字符串存在了3次原创 2015-09-02 10:55:44 · 2234 阅读 · 2 评论 -
游戏服务器主程白皮书-序言
在从事游戏开发的6年时间里面,涉及的内容包括运营平台、GM工具、MMORPG、FPS游戏。期间得到很多同事、领导的帮助,在技术和管理上都有了自己的进步和总结。由于在与团队成员的约谈过程中,几乎所有想要继续做游戏的程序员都会提到一个问题:“怎么样成为一个主程?”因为这个就是大家的努力方向,是大家学习的一个阶段性目标。游戏服务器主程应该来说是一个对技术要求繁杂,几乎涉及了处理显示相关的其他各种原创 2015-08-24 15:23:19 · 1468 阅读 · 0 评论 -
有关Couchbase制作静态链接库嵌入服务器工程
有关Couchbase制作静态链接库嵌入服务器工程1. 文件列表cbsasllibcouchbase-2.4.9\contrib\cbsasl\srccouchbase_iocplibcouchbase-2.4.9\plugins\io\iocpcouchbase_selectlibcouchbase-2.4.9\plugins\io\selectcouch原创 2015-07-06 17:02:27 · 796 阅读 · 0 评论 -
汇编原理复习
总线:地址总线8086 16位结构,却要进行20位地址总线寻址。所以使用了段地址+偏移地址两个16位寄存器来通过地址加法器生成20位物理地址达到20位寻址能力数据总线控制总线CPU:运算器控制器寄存器控制器控制各种器件运行寄存器负责进行信息存储运算器进行信息处理总线链接各种器件寄存器:通用寄存器:SI、DI、AX、BX、CX、原创 2015-01-22 15:09:17 · 818 阅读 · 0 评论 -
有关UDP打洞Session保持时间
最近游戏上线,发现了很奇怪的事情。最后确认是UDP映射保持时间的问题,UDP映射保持时间有一部分设备远比想象的短。经测试差不多15-20s左右,映射就被重置了。可以看到34s, 该客户端的映射就已经重置了。不过通过玩家反馈以及客户端日志对比,不少玩家20s,21s的时间间隔,映射就已经被重置了。目前实际最短时间设置不清楚。不过据说华为的一部分设备默认时间是20s,应该是业界最短时间了。原创 2014-11-27 21:43:06 · 4825 阅读 · 0 评论 -
Openerp开发进销存系统完毕总结
差不多用了2个星期的闲余事件,对于openerp v7.0进行了学习和应用开发。细节总结如下安装Openoffice在openoffice中安装openerp report designer插件(openerp 7.0中自带)1.保存openoffice文件在英文路径下。如果不保存,send to server的时候会没有反应2. 主要类osv open原创 2013-06-21 09:28:53 · 8211 阅读 · 2 评论 -
curllib的编译
http://blog.youkuaiyun.com/zengraoli/article/details/9189449额外转载 2014-11-03 16:45:23 · 743 阅读 · 0 评论 -
有关服务器协议设计的总结
有关服务器协议设计的总结下面内容都是经验教训,与大家共勉。1. TCP、UDP对比一下吧a) TCP优点 i. 按字节流保续 ii. 只要连接在,保证到达 iii.原创 2014-03-04 21:36:17 · 1527 阅读 · 0 评论 -
IOCP接收性能测试。瓶颈或者问题?
环境物理机 * 7:1台作为服务器,6台作为客户端 CPU:E5405 2.0GHz4*2 Mem:16G NetworkCard:1000M*2系统: Windows2008 Server R2测试方式1. DOETest工程release版编译测试服务器。2. DOECl原创 2014-02-26 19:09:00 · 1675 阅读 · 0 评论 -
NP使用经验——中国区慎用
1. Np中国没有什么技术能力,都是支持团队,他们没有积极解决问题的意愿,能力也有限,反馈速度也较慢。例如我们这边发现有个客户端问题玩家进不了游戏,问np是不是np的问题,他们会查一下说有这个问题,后面又发现其他问题,问一下,说确实也有这个问题也无法解决,如此往复。 2. windows升级后,NP一定会禁止登陆发114报错,这个是np遗留问题,硬伤,无法解决转载 2013-12-17 14:09:40 · 1830 阅读 · 0 评论 -
vs2010有关Release版本dump内变量值显示错误问题的解决
首先vs2010版本存在鼠标在变量上没有显示Tips, watch里面输入变量名显示无法找到该变量的问题。这是一个Bug,需要打SP1补丁。再次验证了MS的东西,没有出SP1是无法正常用的理论。除此之外,还是存在部分变量无法显示,this指针显示内容错误,显示的局部变量信息错误等问题。这个问题时Og优化导致的。使用O2优化的时候其实是进行了8个优化/Og/Oi/Ot/Oy/Ob原创 2013-09-11 20:30:54 · 1644 阅读 · 0 评论 -
数据库相关
数据库性能优化1.主键2.索引3.减少行数 ———— 二进制流4.列拆分5.行拆分数据库操作流程思考游戏的数据存储按照对象分成两部分。玩家数据和服务器数据。游戏的数据存储按照存储写操作方式分成两种。立即存储和缓存定时存储。对于交易相关数据库流程存在两种方案1. 基本功能独立修改方案对于通用交易货币制作基本流程,所以其他流程原创 2013-08-22 14:31:39 · 768 阅读 · 0 评论 -
游戏的登陆和离线流程思考
1.登陆流程a.LGW connect tokenverify versionverifyb.LGW->Cluster Login1b.Cluster->GW Occupyc.GW->Cluster Occupy Ackd.Cluster->LGW GWOccupyNtfe.LGW->Client GWOccupyNtf MD5Ntff.LGW Disconnect原创 2013-08-01 16:59:51 · 1070 阅读 · 0 评论 -
有关服务器属性系统的思考
脑袋有点凌乱,需要整理有关游戏属性与存储方式游戏属性可以分成2类:静态属性、动态属性1.静态属性:该属性对于属性所属的对象是不会随着游戏进行而变化的2.动态属性:该属性在游戏的进行过程中会进行变化。动态属性又可以分成2个子属性。基础属性、衍生属性a.基础属性:就是该属性的具体数值不能通过其他属性计算而得b.衍生属性:该属性的具体数值通过其他属性就可以计算而得原创 2013-07-24 21:43:28 · 888 阅读 · 0 评论 -
IOCP系统Bug
对IOCP对象进行GuidDisconnectEx。很小的概率会导致没有IOCP返回。具体原因还不清楚,已经排除没有进行适当IOCP的问题。我们把其成为僵尸问题。目前的解决方案是记录连接对象的GuidDisconnectEx调用次数,如果超过4次,就直接进行Closesocket操作。原创 2013-07-30 11:08:53 · 862 阅读 · 0 评论 -
再议成就系统框架设计
根据http://blog.youkuaiyun.com/heartrude/article/details/8523570的设计,其实还有几点可以优化1.Group组的Buff是靠严格的配置的偏移量计算出来的,这个太不可控了。Buff可能出在无法检查的策划小错误上2.如果已经有N种类型的成就,而有一个新的需求,其事件是已有的几种成就组事件的组合,则需要产生一种新的成就组,使用新的成就Bu原创 2013-01-21 13:18:49 · 1786 阅读 · 0 评论 -
成就系统框架设计
成就系统配置成就参数操作类型:1位 8位 16位 32位AchivementGroup:同一种成就组成一组,比如杀死3个敌人,杀死10个敌人Param1CheckType: 0:忽略 1:= 2:> 3:= 5:ModifyType:0:忽略 1:8位加 2:16位加 3:32位加 4:位设置 5:8位设置 6:16位设置 7:32位设置UseEventParam: 0:使用M原创 2013-01-21 09:44:43 · 5238 阅读 · 0 评论 -
Physx线程调研
在服务器运行过程中,发现Physx线程竟然增加到了8个。非常奇怪。然后我对Physx的线程进行了一次调研,以了解这些线程的功能和这些线程是否可控。1.Physx文档中涉及的线程有3种a.Simulator线程。如果设置了NX_SF_SIMULATE_SEPARATE_THREAD会使得每个sence在simulator和fetchresult之间开启一个线程进行物理模拟。我们称之为原创 2013-01-18 10:32:32 · 1099 阅读 · 0 评论 -
有关7z的代码阅读
原因:由于服务器存在大数据量日志.日志使用tgz格式压缩的。数据量降低到了原来的1/20差不多。如果处理需要进行解压,查询就太麻烦了。而且需要的空间一下子增加了好多。然后就想要做一个小程序,支持对压缩文件直接进行处理。首先就想到了对现有的开源压缩解压库。没找到线程的,就用7z把。反正也比较容易转成库。代码的编译:我用的是vs2008 sp1。 在通过取消7zCrcOpt.a原创 2012-09-08 10:28:06 · 1856 阅读 · 2 评论 -
PhysX学习记录 五 Actor对象
PhysX主要学习内容,当然是了解模拟对象Actor了。先上框架图。这个是SDK文档上面的。NxJoint组合NxActor。NxActor包含NxShape用来进行碰撞。NxShape由NxMaterial、Mesh组成。Actor有Static,dynamic的区别。一个可动,一个不动。在创建时,没有NxBodyDesc就是stati原创 2012-07-21 14:49:42 · 2517 阅读 · 0 评论 -
PhysX性能测试
PhysX 2.8.1 测试报告 一测试环境:CPU:Intel Xeon W3565 3.20G*4 Mem:4096M GraphicsCard:GeForce GTX 560 Drive:8.17.12.8562 CPU模拟OS:Win7 x64 PhysXSystem:9.11.0621测试描述:从后续的游戏开发考虑,使用PhysX影响最大的两个参数,子弹数量和车辆数量原创 2012-08-01 16:33:13 · 2474 阅读 · 0 评论 -
PhysX学习记录 四 参数杂记
这里记录了在文档阅读过程中对于SDK得参数的理解。先给一份全的参数表,后续慢慢追加ParameterDefault ValueDescriptionNX_PENALTY_FORCE DEPRECATEDNX_SKIN_WIDTH:皮肤宽度。主要是刚体堆叠计算的问题。如果没有皮肤,原创 2012-07-21 14:31:03 · 2165 阅读 · 0 评论