2011年5月27日

关于浮点数的小常识

摘要: 浮点数不能直接用==来判断是否相等,但可以用< 或 >来确定大小。确定两个浮点数相等和精确度有关。可以用标准C99提供的几个精度常量来判断是否相等。float.hFLT_EPSILON float精度DBL_EPSILON double精度LDBL_EPSILON long double精度如:bool DoubleEquel(double a, double b){ return abs(a - b) < DBL_EPSILON;}a和b的绝对值小于DBL_EPSILON就认为是相等的。 阅读全文

posted @ 2011-05-27 17:23 daemonh 阅读(161) 评论(0) 推荐(0) 编辑

2011年5月26日

记录:gcc的一些宏

摘要: gcc -dM -E - < /dev/null可以查看各种宏,比如__linux__, __amd64__之类的。 阅读全文

posted @ 2011-05-26 12:42 daemonh 阅读(154) 评论(0) 推荐(0) 编辑

2011年5月25日

记录:几类协议的区分

摘要: REQ(REQuire): 请求类协议,一般是client主动发起。RES(RESponse): 回应类协议,对REQ的一个回应,带有处理结果的数据包。ACK(ACKnowledge): 确认类协议,对REQ的一个回应,与上面的区别是数据包中只有确认序号之类的东西,没有其他内容。NTS(NoTiCE): 通知类协议,这类协议,接收者无须回应(RES或ACK)。 阅读全文

posted @ 2011-05-25 11:10 daemonh 阅读(243) 评论(0) 推荐(0) 编辑

2011年5月20日

网游服务器和内存碎片

摘要: 这个看似一个很简单的概念,但有些细节可能会漏掉。 直接用默认的new(malloc)/delete(free),如果C库内部没有用一个memory pool,kernel肯定会出现碎片。有的C库如果提供一个公用memory pool有没有意义呢?个人认为意义不大,这种情况下,kernel碎片消失了,但C库的pool还是会出现碎片。问题没得到根本的解决,只是碎片从地方转移到另外一个地方而已。有人也有可能实现一个自己的公共的memory pool,效果和C库的memory pool是一样的。 实际中,可以考虑用一个专有的memory pool(可以称为object manager),系统启动时,预 阅读全文

posted @ 2011-05-20 10:05 daemonh 阅读(141) 评论(0) 推荐(0) 编辑

2011年5月19日

Herm Timer Heap和Timer Wheel介绍

摘要: Herm实现了自己的两种类型的Timer,Heap和Wheel。Timer主要有三种操作,AddTimer, CheckTimout和RemoveTimer。Timer Heap性能是O(log2n) O(1) O(log2n)Timer Wheel全是O(1), 首选。Timer Heap大致实现方法是基于最小堆。1. 检查堆的root节点,如果没超时,结束;有超时,加入pending execute list,重新调整堆; 重复。。。;2. 如果timer是重复执行的,就修改pending execute list中的timer超时时间点,加入堆中;3. 执行pending execute 阅读全文

posted @ 2011-05-19 22:42 daemonh 阅读(265) 评论(0) 推荐(0) 编辑

2011年5月14日

ProtocolBuffer的.NET版本

摘要: 这个可以支持C#,这样C#也可以方便使用protocolbuffer了。http://code.google.com/p/protobuf-net/ 阅读全文

posted @ 2011-05-14 22:17 daemonh 阅读(147) 评论(0) 推荐(0) 编辑

google ProtoBuf开发者指南

摘要: ProtoBuf开发者指南译者:gashero目录1概览 1.1什么是protocol buffer1.2他们如何工作1.3为什么不用XML?1.4听起来像是为我的解决方案,如何开始?1.5一点历史2语言指导 2.1定义一个消息类型2.2值类型2.3可选字段与缺省值2.4枚举2.5使用其他消息类型2.6嵌套类型2.7更新一个数据类型2.8扩展2.9包2.10定义服务2.11选项2.12生成你的类3代码风格指导 3.1消息与字段名3.2枚举3.3服务4编码 4.1一个简单的消息4.2基于128的Varints4.3消息结构4.4更多的值类型4.5内嵌消息4.6可选的和重复... 阅读全文

posted @ 2011-05-14 22:14 daemonh 阅读(264) 评论(0) 推荐(0) 编辑

2011年5月12日

MMORPG无缝大地图服务器架构设计总结

摘要: 地图分进程架构和无缝大地图单进程架构有的游戏服务器,一个进程处理一张或多张地图上的逻辑,进入到不同进程的地图,数据须要一个进程间同步的过程。简单合理的同步做法是,先将数据同步到一个公共服务器;进入到目标进程后,再从公共服务器拉取本角色的最新数据。可以参考 http://blog.csdn.net/herm_lib/archive/2011/05/01/6381872.aspx 中的logicsvr1 dbproxy logicsvr2的关系。分进程架构有他的优缺点。优点 (1) 实现简单(当然,有的游戏所有的地图是在一个逻辑进程里,同步都省了,更简单)。 (2)分进程后,整个服务器组也可以支持 阅读全文

posted @ 2011-05-12 13:23 daemonh 阅读(1267) 评论(0) 推荐(0) 编辑

2011年5月5日

一种全局对象ID生成方法

摘要: 网游中,角色ID、公会ID和道具ID等一般设计成全局唯一。这样做,一个便于跟踪这些对象的生存状态;另外一个是合区不会产生冲突。用大区ID+大区内服务器ID+时间+生成序列生成一个64bits的数字作为全局ID,其中0表示非法的ID。 globalID = clusterID(8) + zoneID(8) + time(30) + seq(18)time(30)以秒为单位,可以表示34年。seq(18)是262144,也就说1毫秒内可以生成262个ID,5us一个,应该足够了。进一步讲,如果1s内,seq重复了,就生成0,表示生成失败,下一秒重试就行了。 阅读全文

posted @ 2011-05-05 21:57 daemonh 阅读(186) 评论(0) 推荐(0) 编辑

2011年5月4日

记录一下,gvim配置文件

摘要: set guifont=courier_new:h14set nu!colorscheme desertsyntax enablesyntax onset tags=tags;set autochdirlet Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow=1let g:winManagerWindowLayout='FileExplorer|TagList'nmap wm :WMToggle<cr>let g:miniBufExplMapCTabSwitchBufs=1let g:miniBufExplMapWindo 阅读全文

posted @ 2011-05-04 10:29 daemonh 阅读(186) 评论(0) 推荐(0) 编辑

导航