MMO服务器架构
文章平均质量分 66
cometeor
这个作者很懒,什么都没留下…
展开
-
快速构建MMO服务器框架(二)网络:选用boost库
好像地球上还没有不支持网络的网游服务器吧。 以下几篇文章将尝试用boost库来实现服务器的网络相关功能。 备选的库还有ACE和libevent。 ACE太胖,个人比较反感标准容器都自己实现的做法。 libevent太瘦,其它功能不够丰富。 boost不胖不瘦,兼容和增强stl,一堆丰富的类库,asio直接把高性能的网络并发模型封装好了,原创 2009-11-27 18:36:00 · 6318 阅读 · 1 评论 -
Protobuf生态圈(上)简介和数据库粘合层
关于Protobufprotobuf是google的一个开源序列化框架,基于二进制数据交换格式,兼顾了效率和灵活性。详见http://code.google.com/p/protobuf/。本文假定读者对protobuf已经有了初步接触,故略过一些基本和细节的描述,着重于介绍protobuf在笔者项目中的应用思路。因项目主要编程语言是c++,所以本文的示例着眼于如何在c++中借助protobuf简化一些通用模块的处理。对于其它语言(java,python等),如果语言本身没有更好用的特性或者更方便的库的话,原创 2011-01-31 10:27:00 · 11131 阅读 · 6 评论 -
protobuf消息的自动派发
google protobuf消息序列化后的数据是没有类型信息的。而一般网络应用要求序列化后发送到对端,还原出类型,反序列化,再派发给相应的消息处理函数。以下代码简单实现了自动派发的机制。新增protobuf消息只要增加一行声明的代码和相应的处理函数就可以了。http://eddyserver.googlecode.com/svn/trunk/common/tests/protoserve原创 2010-05-20 17:19:00 · 4491 阅读 · 1 评论 -
整合protobuf、boost::iostreams和NetMessage类
示例代码见http://eddyserver.googlecode.com/svn/trunk/common/tests/messagetest.cc NetMessage类提供了兼容stl的接口,通过boost::iostreams示例的ContainerDevice可以方便的与boost::iostreams::stream结合起来。而boost::iostreams::str原创 2010-05-20 16:56:00 · 4482 阅读 · 0 评论 -
代码已上传至googlecode
本blog的相关代码svn checkout http://eddyserver.googlecode.com/svn/trunk/ eddyserver-read-only未完善,烂是烂了点...原创 2010-05-14 22:13:00 · 4412 阅读 · 4 评论 -
boost::asio 1.4.3的linux实现总算采用epoll的et模式了
Asio:Improved performance.Reduced compile times.Reduced the size of generated code.Extended the guarantee that background threads dont call user code to all asynchronous operations (#3923).原创 2010-05-14 22:08:00 · 6123 阅读 · 0 评论 -
高效的网络消息类实现
感谢gogoplayer提供的思路。 事情的经过是这样的:几天前gogoplayer跟我提到想用引用计数来解决消息广播时拷贝多份的问题,顺带提到boost::shared_ptr的引用计数是线程安全的。这一点跟我的记忆有出入,于是查boost的手册确认了一下,发现从1.33.0开始shared_ptr就用了lock-free来实现线程安全,相当高效。 于是就想把原本的NetMess原创 2010-05-14 21:40:00 · 4105 阅读 · 0 评论 -
TCMalloc
今天看protobuf的文档提到了TCMalloc,发现其小对象的内存分配策略跟我在项目中的实现思路差不多...不过它的大对象另有一套策略,而且远比我写的通用。要是早知道这玩意就不用重复发明轮子了。相关文档:http://goog-perftools.sourceforge.net/doc/tcmalloc.html中文翻译:http://shiningray.cn/tcmalloc-转载 2009-12-15 15:46:00 · 3661 阅读 · 1 评论 -
快速构建MMO服务器框架(七)高并发TCP网络框架
忙活了一个多星期,差不多把基于TCP的高并发连接网络架构测试稳定了。目的:利用多线程把网络连接及数据包压缩/解压、加密/解密等等耗时的操作分流(asio对这些没有原生的支持),顺带提供线程池框架。只对游戏逻辑层暴露出单线程的外观,隔离底层多线程的复杂度。结构如下图(未遵循什么标准,将就着看吧): TCPSessionHandler:暴露给逻辑层的类,内部负责通过TCPIOT原创 2009-12-14 18:09:00 · 12156 阅读 · 4 评论 -
快速构建MMO服务器框架(五)timer的那些事儿
定时器管理在MMO服务器这类需要处理大量事务的系统中,往往是优化的热点。 最简单的轮询式定时器的实现如(psudo code):class Player{ public: void loop() { if (timer.check()) { //do something; } //other timer ...原创 2009-11-28 22:26:00 · 6174 阅读 · 0 评论 -
快速构建MMO服务器框架(一)前面的唧歪
聪明的脑袋是宝贵的有限的资源。当世界还充满非常多有待解决的有趣的新问题时,它们不应该被浪费在重新发明轮子这类事情上。 —— Eric S. Raymond 大多数程序员都自认为自己比通常的人类要聪明。在网游开发圈子游荡了两年,所见的所谓资深程序员无一不爱干重复发明轮子的事情(部分原因也许跟他们所习惯的时代有关,尚无原创 2009-11-27 17:17:00 · 5793 阅读 · 2 评论 -
快速构建MMO服务器框架(三)boost.asio初步
c10k问题已经成为历史。(详细) Boost.Asio is a cross-platform C++ library for network and low-level I/Oprogramming that provides developers with a consistent asynchronous model usinga modern C++ approa原创 2009-11-28 00:53:00 · 8589 阅读 · 0 评论 -
快速构建MMO服务器框架(六)asio稍微复杂一些的例子:高并发echo
以下是来自boost example的异步echo server://// async_tcp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distribut原创 2009-11-29 19:55:00 · 10544 阅读 · 8 评论 -
快速构建MMO服务器框架(四)关于boost.asio的补充
今天看了看asio的源码,上一篇的一些疑惑也清楚了。遇到问题果然read the f**king code才是王道。 关于异步socket:io_service在调用async_send、async_receive这类接口的时候,会把socket设置成非阻塞,用户不需要手动设置(相当体贴)。不过类似no_delay这样策略性的选项还是需要操心的(不然谁知道你想干嘛)。 关于lin原创 2009-11-28 16:24:00 · 7122 阅读 · 1 评论 -
用C#中的yield实现Coroutine框架
最近看到Unity3D中的Coroutine,思路相当值得借鉴。在服务器(尤其是基于事件驱动框架的服务器)编程中,异步操作是难以避免的。传统的异步操作会因为大量的回调操作造成逻辑的支离破碎,再加上状态维护和各种异常处理,很容易就将代码的复杂度提升到外星人才能理解的程度。比如,有这样一个宠物AI:等待主人下达移动命令;移动到目标地点;等待3秒钟;喊话;常用的编程模式(非轮询):class Pet{ public event MoveCompleted; public Dispatche原创 2011-04-13 10:23:00 · 13686 阅读 · 3 评论