快速业务通道

ASP.NET Web Game构架设计3--业务逻辑服务器之计时器

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

业务逻辑服务器里主要包括以下四个模块

u 计时服务器

u 资源服务器

u 其他逻辑服务

u 对外的WCF接口模块/Socket接口模块

1.计时服务器

计时服务器的作用是给需要长耗时的功能提供一个延时管理模块,比较典型的 应用如“种菜”的计时,武将升级的计时,科技升级的计时,建筑升级的计时等 。计时服务器主要由四个元素组成:

u 用于保存计时队列的数据表

u 添加计时的函数接口

u 删除计时的函数接口

u 用于加速的函数接口

u 定时机制

u 可以动态扩展的计时过期处理程序

用于保存计时队列的数据表

先来说一下存储结构,计时的存储大体上有两种方案:1.基于内存;2.基于数 据库。首先要说明的,从经验角度出发,本人更青睐于第二个方案。下面对这两 个存储方案进行评比:

基于内存的优点:

操作速度快

基于内存的缺点:

如果服务器停电,所有用户的队列数据将全部消失!(客服的灾难)

基于数据库的优点:

不怕服务器掉电,只要服务程序启动,就可以处理过期的队列

基于数据库的缺点:

读取数据的速度较慢,

基于上面的比较,以及我的基本原则--“不让客服的电话被打爆!”,得到的 结论就是:使用数据库来存储计时队列。计时队列的表结构如下图所示:

我们可以看到,计时队列的存储,是由两张表来实现的,一张主表 (PrimaryQueue),一张辅表(SecondaryQueue)。

每一次添加一个新计时队列的时候,我们要先在PrimaryQueue中添加一条记录 ,在该记录里要包括,这个队列什么时候开始,多长时间结束,以及非常重要的 队列类型名。读者会对两件事儿产生疑问:1.为什么记录的是时长,而不是结束 时间。答案是:为了方便计时的加速操作,为了方便界面上的倒计时显示。2.队 列类型名(QueueTypeName)字段是干什么的。答案是:每一个队列都要有一个标 记,该标记通过字符串形式告诉应用程序,当该队列过期后,应该找哪个函数, 或者哪个类来处理相关数据。

仅仅在PrimaryQueue中添加一条记录是不够的,因为我们还不知道当这个队列 过期后,有哪些要处理的数据是相关的,为此我们还要在Secondary表中添加对应 的记录,PrimaryQueueID是外部键,当然在SecondaryQueue中最重要的是 ForeignID字段,该字段存储的是相关逻辑表中,和本队列有关的那条记录的ID, 根据此ForeignID,我们可以在对应的计时过期处理程序中对相关记录做处理(这 儿说的很别扭,当然也不太好表达,请读者注意理解!)。

呵呵,看到这里,很多读者又会产生一个疑问,为什么要两张表,上面说的那 点儿事儿,一个表不就搞定了吗?答案是:一个表是搞不定的,因为在很多情况 下,在一个队列里,可能处理的是多个元素的计时,这个时候可能会出现的情况 是,在PrimaryQueue中有一个记录,表示是一条队列,并且这个队列中的数据要 作的事儿都一样,开始时间也一样,过期时间也一样,在SecondaryQueue里对应 的是本次队列的多个计时元素。举例说明,在用户的一次操作中要为该基地建造5 只船,因为每只船都有自己独立的状态,所以每只船的数据都存储在基地表和船 只列表的关系表中(每只船一条记录),此时,我们的队列表中的数据是:有一 条记录在PrimaryQueue中,记录着这些操作的开始时间以及时长,另外,对应主 表中这个新的队列,在SecondaryQueue表中会存在5条子记录,每个记录的 ForeignID字段的值就是每一只船的ID(基地表和船只列表的关系表的ID)。现在 应该明白使用两个表的原因了吧!

添加计时的函数接口以及删除计时函数接口

这两个功能相对来讲是比较简单的,无非就是将数据添加到数据表中,以及从 数据表中删除。

用于加速的函数接口

加速的函数接口,主要实现两点功能:1.直接将加速的时间从 TimeLengthSeconds字段上减下去;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号