posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

01 2011 档案

     摘要: IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。在处理多个并发的异步I/O请求时,以往的模型都是在接收请求是创建一个线程来应答请求。这样就有很多的线程并行地运行在系统中。而这些线程都是可运行的,Windows内核花费大量的时间在进行线程的上下文切换,并没有多少时间花在线程运行上。再加上创建新线程的开销比较大,所以造成了效率的低下。
  阅读全文

posted @ 2011-01-25 15:36 点点滴滴| 编辑 |

     摘要:   丘比特在天上挥舞着小翅膀,掌管着人世间的爱情归属,某一刻说不定就看上了谁,然后“扑哧”射出一支爱箭,中箭的男女突然有了来电的感觉,相见时,心跳加速,呼吸加快,而如果一日不见,就好似隔了三秋,这便是爱情。
  阅读全文

posted @ 2011-01-24 14:38 点点滴滴| 编辑 |

     摘要: 如果你有一个很受欢迎的Web站点,你会发现当请求的连接数增加时,服务器的响应延时也会随之增加。虽然你可以增加RAM、升级处理器、使用更快的驱动器及总线,这在短期内会有一定的帮助,但最终会发现一台服务器无法完成需要的任务。

使用多台服务器平衡负载是一个不错的想法,你可以在你的服务器池中随意增加多台服务器来提高服务器的性能和增强网络的稳定性。如果你的服务器池中有多台服务器,当一台down机后,其他服务器可以接替它的工作,继续提供服务而不至于造成服务中断。
  阅读全文

posted @ 2011-01-19 20:24 点点滴滴| 编辑 |

     摘要: 都已经看出来了,这种每切换一次地图就要重新连接服务器的方式实在是不够优雅,而且在实际游戏运营中也发现,地图切换导致的卡号,复制装备等问题非常多,这里完全就是一个事故多发地段,如何避免这种频繁的连接操作呢? 最直接的方法就是把那个图倒转过来就
  阅读全文

posted @ 2011-01-19 19:24 点点滴滴| 编辑 |

     摘要: 狭义的游戏对象是指游戏世界中所能看到及可交互的对象,如玩家、怪物、物品等,我们这里也主要讨论这类对象在服务器上的组织及实现。
  在大部分的MMOG中,游戏对象的类型都大同小异,主要有物品、生物、玩家等。比如在wow中,通过服务器发下来的GUID我们可以了解到,游戏中有9大类对象,包括物品(Item)、背包(Container)、生物(Unit)、玩家(Player)、游戏对象(GameObject)、动态对象(DynamicObject)、尸体(Corpse)等。
  阅读全文

posted @ 2011-01-19 19:23 点点滴滴| 编辑 |

     摘要: 花了几个小时的时间给MANGOS的几个工程都加上了预编译头文件,编译速度与以前相比大大提高,不过game工程的编译速度还是不太理想,里面的文件包含关系错综复杂,再加上大量模板的使用,一个小小的改动都会引起好多文件的重新编译,实在是影响效率。  阅读全文

posted @ 2011-01-19 19:18 点点滴滴| 编辑 |

     摘要: 关于登录服、大区服及游戏世界服的结构之前已做过探讨,这里再把各自的职责和关系列一下。  阅读全文

posted @ 2011-01-19 19:18 点点滴滴| 编辑 |

     摘要: 关于这一节,这几天已经打了好几遍草稿,总觉得说不清楚,也不好组织这些内容,但是打铁要趁热,为避免热情消退,先整理一点东西放这,好继续下面的主题,以后如果有机会再回来完善吧。本节内容欠考虑,希望大家多给点意见。  阅读全文

posted @ 2011-01-19 19:12 点点滴滴| 编辑 |

     摘要: 有关State模式的设计意图及实现就不从设计模式中摘抄了,我们只来看看游戏服务器编程中如何使用State设计模式。

  阅读全文

posted @ 2011-01-19 17:11 点点滴滴| 编辑 |

     摘要: 前面一直都在说接收数据时的处理方法,我们应该用专门的IO线程,接收到完整的消息包后加入到主线程的消息队列,但是主线程如何发送数据还没有探讨过。 一般来说最直接的方法就是逻辑线程什么时候想发数据了就直接调用相关的socket API发送,这要求服务器的玩  阅读全文

posted @ 2011-01-19 17:08 点点滴滴| 编辑 |

     摘要: 消息队列锁调用太频繁的问题算是解决了,另一个让人有些苦恼的大概是这太多的内存分配和释放操作了。频繁的内存分配不但增加了系统开销,更使得内存碎片不断增多,非常不利于我们的服务器长期稳定运行。也许我们可以使用内存池,比如SGI STL中附带的小内存分配  阅读全文

posted @ 2011-01-19 16:57 点点滴滴| 编辑 |

     摘要: 既然说到了消息队列,那我们继续来稍微多聊一点吧。 我们所能想到的最简单的消息队列可能就是使用stl的list来实现了,即消息队列内部维护一个list和一个互斥锁,putMessage时将message加入到队列尾,getMessage时从队列头取一个message返回,同时在getMessage
  阅读全文

posted @ 2011-01-19 14:57 点点滴滴| 编辑 |

     摘要: 当阅读一项工程的源码时,我们大概会选择从main函数开始,而当开始一项新的工程时,第一个写下的函数大多也是main。那我们就先来看看,游戏服务器代码实现中,main函数都做了些什么。 由于我在读技术文章时最不喜看到的就是大段大段的代码,特别是那些直接Ct  阅读全文

posted @ 2011-01-19 14:51 点点滴滴| 编辑 |

     摘要: 正如我们在前面曾讨论过的,登录服要实现的功能相当简单,就是帐号验证。为了便于描述,我们暂不引入那些讨论过的优化手段,先以最简单的方式实现,另外也将基本以mangos的代码作为参考来进行描述。 想象一下帐号验证的实现方法,最容易的那就是把用户输入的  阅读全文

posted @ 2011-01-19 14:47 点点滴滴| 编辑 |

     摘要: 如果我们就此打住,可能马上就会有人要嗤之以鼻了,就这点古董级的技术也敢出来现。好吧,我们还是把之前留下的问题拿出来解决掉吧。 一般来说,当某一部分能力达不到我们的要求时,最简单的解决方法就是在此多投入一点资源。既然想要更多的连接数,那就再加  阅读全文

posted @ 2011-01-19 14:41 点点滴滴| 编辑 |

     摘要: 讨论了这么久我们一直都还没有进入游戏世界服务器内部,现在就让我们来窥探一下里面的结构吧。 对于现在大多数MMORPG来说,游戏服务器要处理的基本逻辑有移动、聊天、技能、物品、任务和生物等,另外还有地图管理与消息广播来对其他高级功能做支撑。如纵队、  阅读全文

posted @ 2011-01-19 14:36 点点滴滴| 编辑 |

     摘要: 回想一下我们在玩wow时的操作流程:运行wow.exe进入游戏后,首先就会要求我们输入用户名和密码进行验证,验证成功后才会出来游戏世界列表,之后是排队进入游戏世界,开始游戏... 可以看到跟前面的描述有个很明显的不同,那就是要先验证帐号再选择游戏世界。
  阅读全文

posted @ 2011-01-19 14:32 点点滴滴| 编辑 |

     摘要: 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可维护性也有更大的帮助。
    阅读全文

posted @ 2011-01-19 14:31 点点滴滴| 编辑 |

posted @ 2011-01-12 13:58 点点滴滴| 编辑 |

posted @ 2011-01-12 13:44 点点滴滴| 编辑 |

posted @ 2011-01-11 11:49 点点滴滴| 编辑 |

posted @ 2011-01-05 20:25 点点滴滴| 编辑 |

posted @ 2011-01-05 14:33 点点滴滴| 编辑 |

     摘要: 游戏开发所需知识  阅读全文

posted @ 2011-01-05 13:58 点点滴滴| 编辑 |

posted @ 2011-01-05 11:23 点点滴滴| 编辑 |