X-Matrix

MMORPG无缝服务器设计

2008年8月23日

ACE,Python和Java(我所知道的)中要获得多线程的能力,都是通过从一个线程对象基类继承,重载特定的成员函数来实现。简单的来看,它用起 来也相当简单,理解起来也不复杂,但,用过一段时间之后,就会发现处理复杂问题时,你会遇到许多的限制。 1.必须从一个线程对象基类继承吗? 现在看来是的,否则,你只有使用系统OS提供的线程函数了。 2.我已经有个类了,它不是从线程对象基类继承的,我要使用多继承吗? 是的,除非重写。 3.我有一个函数,想让他在另一个线程执行,一定要写个类吗? 是的。 4.我有一个类,它的每个成员函数我都想他们在另外的线程中执行,怎么办? 线程对象基类只有一个线程函数,你必须通过某种通讯机制去让它执行不同的成员函数。 4.当线程在执行一个对象的某个成员时,这个对象被删除了怎么办? 没办法,你必须自己管理对象的生存期。 呜呼!问题越来越多,该怎么办?我们需要某种透明的线程模型,他能处理任意的需要被异步执行的类的成员函数或者普通函数,它能提供一种策略,使得我们能 自动管理处理不同线程中的对象的生存期。我们现在有了这种工具了吗? 熟悉Boost的人可能觉得boost.thread也许提供了这种能力。很不幸,它满足了一部分上述需求。 正在实现上述需求的一个线程模型。它将任务与任务的执行者分离,它支持人任何的任务,不论它是普通的函数,还是具有任意参数的成员函数,你均能将它作为 一个任务抛到其他的线程执行,它是非侵入式,通过它所支持的生命期管理,你不用在担心对象在异步执行时被销毁。它用模板实现。
posted @ 2008-08-23 22:25 x-matrix 阅读(1662) | 评论 (14)编辑 收藏

2008年8月19日

开始了一些基础库的代码编写,基本的设计原则是: 1.基于模板 2.尽量使用组合 3.尽量不依赖第三方库 基础库将包含以下几个核心的功能: 1.对象生存期的自动管理 2.透明的内存管理 3.透明的线程管理 4.数据的对象化存储 5.远程对象通讯/代理 现在做的是个Mysql对象化访问的组件。我们知道mysql是关系数据库,但我们提供了一组在一定程度下的对象化操作mysql的功能,使用这个组 件,你将面对的是一个个对象,而不在是一张张表,但,面向对象数据库现在还处于理论的验证期,现在还没有成熟的数据库产品被大规模使用,主要使用的还是关系数据库,我们提供的这一层对象化访问层不可能做到完全的面向对象数据库能力,但可以满足一般的需求,但这就足够了,至少我是这么认为。
posted @ 2008-08-19 23:51 x-matrix 阅读(1319) | 评论 (0)编辑 收藏

2008年7月30日

所谓的无缝服务器是指一个游戏只有一个游戏世界,游戏中所有的角色都互相可见,可交互的。
传统的游戏服务器是分区的。进入游戏之前,先要选择游戏服务器组,再选择一个服务进入。进入游戏后如何要从一个地图到另一个地图,则要切换服务器(客户端或者接入服务器内部切换),对玩家来说,则是画面切换,像大话西游,传奇都是这样。魔兽世界在进入服务器后,如果不前往另一个大陆,则无换面切换,但 这不是真正的无缝。
无缝服务器复杂的根本是服务大量(甚至海量)玩家的要求。玩家多意味着交互多,数据流量大,必然要将请求发往多个服务器处理,于是问题就来了,那就是服务器交互。传统分区服务器设计也是多服务器的,但服务器相数量较小,交互的复杂性不大。但,考虑无缝服务器要服务的是海量的玩家请求,服务器数量比传统服务器大的多。
考虑下面的情况:
A玩家连接svr1,B玩家连接svr2,C玩家连接服务器svr3。现在A要砍B一下,svr1接到了A砍B的请求,但在svr1上没有B玩家,它如何才能找到B呢?也许加一个全局的玩家位置服务器可以解决这个问题,这个服务器上记录了每个玩家位于哪个服务器。但,考虑下,这个全局服务器只有一台吗?它可以处理所有的玩家吗?如果人数太多,在增加一台这样的服务器会怎么样?它们之间如何交互?很快就会发现,这个方法行不同。其实,这种全局服务器 的存在是分区服务器时代的产物,在无缝的前提下,不会在有全局服务器这样的东西。全局意味着唯一,而无缝则要求无限动态扩展。
无缝服务器的关键是维护一个服务的网状结构,只有这样,才可能动态扩展。
posted @ 2008-07-30 14:56 x-matrix 阅读(1844) | 评论 (11)编辑 收藏
HI All:
 欢迎大家的加入MMORPG无缝服务器的讨论论坛!这个论坛将主要关注无缝服务器的架构设计。我们知道,与传统的分区服务器相比,无缝的世界可以带给玩家更宏大,真实的感官体验,扩大玩家的互动交流,增加游戏乐趣。要知道,网络游戏于单机游戏的根本区别是,玩家的游戏对象从电脑转向了与玩家对等的远端世界的玩家。但这也带来了新的问题。无缝服务器由于要处理大世界的玩家对象,原有的基于分区的服务器架构已不能满足需求,我们需要处理的玩家交互不是几千,几万,而是十几万,甚至上百万。于是,通讯的压力急剧增加,业务逻辑的复杂度也成倍上升。如何解决这些问题?想方设法提高网络通讯的性能?减小数据流量?增加新的服务器?显然,这些想法过于简单。为了服务大量玩家,必须设计新的服务器架构。 现有的关于无缝服务器的构架有两种:基于服务的架构(service-based),基于地图区块的架构(area-based)。这两种架构都有各自的优缺点,单纯想象难以厘清其中的复杂头绪。我们期望讨论与实现来发现设计,完善设计,达到我们心中那个无限广阔的充满虚幻的梦想世界。一起加油
吧!
 有一个开源的无缝服务器框架会在以后加入进来,欢迎有兴趣的朋友贡献自己的一份力量!

 我有一个梦想:在朦朦的晨曦里,几缕金色的光芒透过浓密的树冠射落下来,其他的队员还在熟睡,落叶掉落在他们身上,我必须叫醒他们了,今天的任务是赶到枯木营地,杀死那个可恶的枯木法师....

posted @ 2008-07-30 10:06 x-matrix 阅读(1206) | 评论 (3)编辑 收藏

2008年7月29日

MMORPG无缝服务器开发论坛建立,现邀请成员加入!

Google Groups
xmatrix
Visit this group
posted @ 2008-07-29 16:56 x-matrix 阅读(1271) | 评论 (0)编辑 收藏
仅列出标题  

公告

MMORPG无缝服务器论坛
Google Groups
xmatrix
Visit this group

导航

统计

留言簿(2)

随笔档案

最新评论

阅读排行榜