03 2012 档案

记录:protobuf在网游中的用法(二)
摘要:在上一篇介绍的protobuf用法(http://blog.csdn.net/herm_lib/article/details/7384613),有点偏复杂了。可以简化一下。结构: total_len[16] + head_len[8] + head + body。这次像上一篇介绍最后介绍的一样,把head和body分开了,这样可以让服务器对消息的处理更灵活,有时候,服务器只要head内容,这样可以针对性地只解析head,而不用把body内容也解析出来。头定义差不多像下面的样子:package ProtoCS;message Head{ required uint32 cmd_id = 1; 阅读全文

posted @ 2012-03-25 15:44 daemonh 阅读(218) 评论(0) 推荐(0)

记录:protobuf在网游中的用法
摘要:消息传递过程:client ---> gated ---> zonedCS消息结构:message Head { uint32 cmd_id; } message Body { AuthReq auth_req; } message CSMessage { Head head; Body body; }发送数据格式:16bits len + CSMessage。gated--->zoned也有一套消息message GZMessage { uint32 uid; // 账户ID ... 阅读全文

posted @ 2012-03-22 20:24 daemonh 阅读(225) 评论(0) 推荐(0)

多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 Options
摘要:多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间陈硕Blog.csdn.net/Solstice自从 Intel Pentium 加入 RDTSC 指令以来,这条指令是 micro-benchmarking 的利器,可以以极小的代价获得高精度的 CPU 时钟周期数(Time Stamp Counter),不少介绍优化的文章[1]和书籍用它来比较两段代码的快慢。甚至有的代码用 RDTSC 指令来计时,以替换 gettimeofday() 之类的系统调用。在多核时代,RDTSC 指令的准确度大大削弱了,原因有三: 1.. 不能保证同一块主板上每个核的 TSC 是同步的; 2.. C 阅读全文

posted @ 2012-03-19 11:07 daemonh 阅读(494) 评论(0) 推荐(0)

C++ new/operator new/placement new的区别
摘要:new C++语言内置的运算符,分配指定对象类型的内存空间,再调用构造函数。::operator new new的重载运算符,就是分配一片原始的内存空间,调用者要指定内存大小。从功能上等同于C的malloc()?(我不完全确定)placement new 把某个对象放到已经存在的内存空间中。下面看实际例子struct Hello { Hello() { } ~Hello() { } private: int a; }; int main(int argc, char* argv[]) { Hello* hello = new Hello; delete hell... 阅读全文

posted @ 2012-03-12 13:57 daemonh 阅读(209) 评论(0) 推荐(0)

MMO-SNS类游戏服务器间数据交互策略分享
摘要:MMO-SNS类游戏是一种在线角色之间存在交互,同时在线角色又可以同离线角色交互的游戏。这两种交互行为,决定了不同服务器之间的数据交互和常见的MMO类游戏存在很大差别。这类型一般会有下面两种类型的主服务器。OnlineSvr实现一些MMO的业务逻辑,实现像做任务、战斗、NPC AI、视野管理和消息同步等行为。OfflineSvr 实现一些离线类的SNS业务逻辑。注意,这个服务器涉及到操作离线角色的一些数据。OnlineSvr和OfflineSvr的数据交互有一点讲究。简单以角色的EXP做为交互例子。有一个角色R,在OnlineSvr1上,他的经验值记为EXP;有另外一个角色,是R的好友,记为R 阅读全文

posted @ 2012-03-09 20:48 daemonh 阅读(536) 评论(0) 推荐(1)

以太网原理与最小帧长(傻瓜版)
摘要:转自 http://www.chinaunix.net 作者:a_la_lei发表于:2008-10-17 09:43:47熟悉了最小帧长,可以说就明白了为什么基于CSMA/CD协议的以太网有网段长度限制,同时也掌握了以太网的精髓。在这之前,我们应该先了解一下CSMA/CD协议。什么是CSMA/CD协议(载波侦听多路访问/冲突检测协议)?一个房间有很多人,如果同时说话,就谁也听不清楚别人说什么,于是大家约定了一个机制:每个人在说话之前先听一下有没有其他人说话(载波侦听),如果有,自己就先不说话,如果没有,就说话。如果大家同时发现房间里没有人说话,则同时开口,此时就产生冲突(冲突检测),产生冲突 阅读全文

posted @ 2012-03-09 09:56 daemonh 阅读(673) 评论(0) 推荐(0)

系统设计随笔
摘要:http://blog.csdn.net/herm_lib1. 确认业务特点。2. 思考先前的设计经验,找出区别点。3. 改进架构,基本确定分布式的策略,初步确定架构。4. 分析各服务器负载,确定节点瓶颈或者节点无瓶颈。5. 初步量化负载,包括接入网络IO,服务间网络IO,后端持久化IO。6. 思考数据存储策略,存储前端是否cache,何种cache方法(全cache, LRU/LFU或其他); 确定分布式方案;根据业务特点采用不同的持久化策略。7. 系统运行的过程中,将会出现哪些异常,解决的方式。8. 准备好系统的扩展方案,扩展的时候要处理的问题。9. 想清楚容灾方案。 阅读全文

posted @ 2012-03-04 22:18 daemonh 阅读(206) 评论(0) 推荐(1)

8种Nosql数据库系统对比
摘要:http://blog.jobbole.com/1344/导读:Kristóf Kovács 是一位软件架构师和咨询顾问,他最近发布了一片对比各种类型NoSQL数据库的文章。文章由敏捷翻译 –唐尤华编译。如需转载,请参见文后声明。虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。但是NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别。这意味着软件架构师更应该在项目开始时就选择好一个适合的 NoSQL数据库。针对这种情况,这里对Cassandra、 Mongodb、 阅读全文

posted @ 2012-03-03 10:44 daemonh 阅读(156) 评论(0) 推荐(0)

为什么要用非关系数据库?
摘要:原文 http://www.iteye.com/topic/524977随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:1、High performance - 对数据库高并发读写的需求web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强 阅读全文

posted @ 2012-03-03 10:28 daemonh 阅读(428) 评论(0) 推荐(0)

一种LFU淘汰算法
摘要:以前介绍过LRU高效的实现方式:一种O1性能的LRU算法 http://blog.csdn.net/herm_lib/article/details/6535698今天也介绍一下LFU的实现方法。LRU是最近最少使用算法,就是把最早才访问的数据淘汰掉。LFU是最近最不常用算法,就是某一段时间内被用到最少的淘汰掉。LFU时间周期 使用次数的时间长度,这个时间不能太短,短了体现不出哪些数据是热点;同样也不能太长,太长的话,某一个时间点的对某个数据的访问峰值可以长期影响我们的淘汰策略。一般实现的算法可以根据业务特点去调节这个参数。上个周期访问次数权重 在本周期开始的时候,最粗暴的做法是把所有数据的访 阅读全文

posted @ 2012-03-01 19:56 daemonh 阅读(555) 评论(0) 推荐(0)

导航