快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
2.计费作用,因为一般的游戏中,加速是要收 费的,这时候,在加速之前就要检测用户费用是否充足,在加速完毕后,将相应 的费用扣除到。

定时机制

我们如何才能知道哪些数据已经过期了呢?这时我们需要利用Thread编写一个 Timer,这个Timer每间隔一定时长就Sleep一次(比如60秒),每一次Timer启动 时,就去找出已经过期的队列(now-StartTime>TimeLength),并将其中的记 录按QueueTypeName字段的值进行分类(即:功能相同的计时放到一组),然后将 每一类记录的集合都提交到ThreadPool中进行异步处理,基本代码如下所示:

var queueTable = Monitor.GetExpiredQueuesTable();
             var groups = queueTable.AsEnumerable ().GroupBy(row => row["QueueTypeName"]);
             foreach (var item in groups)
             {
                 ThreadPool.QueueUserWorkItem(obj  =>
                 {
                     IGrouping<object,  DataRow> items = (IGrouping<object, DataRow>)obj;
                     foreach (var row in  items)
                     {
                         //deal with the  row
                     }
                 },item);
             }

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

前面我们已经将过期的队列取出来,并对其进行了分类,那么我们如何对每一 类队列中的记录进行处理呢?另外,随着应用程序规模的不断扩大,处理程序的 数量也不会断增加,那么,我们又应当如何保证处理程序的可扩展性呢?

其实,我们可以很容易发现,不同的处理程序中的函数的名称和参数列表应该 是一样的,只不过是该函数所处的文件或者类不同,并且逻辑不同而已。大家会 问题,为什么不同的处理程序的函数名和参数列表也要相同呢?其实想法也很简 单,因为我们需要通过一个统一的调用接口实现函数调用过程。

为了达到可扩展并且方便修改的的目,我的处理程序可以利用IronPython脚本 来实现,使用脚本语言来实现一些逻辑是游戏编程中常常用到的(当然用C#写成 DLL,并动态加载也可以)。我们要做的是,在应用程序所在的目录中添加一个处 理程序的脚本目录,在这个脚本目录中添加若干个IronPython脚本,每个脚本的 文件名应该对应着每一类队列的分类名(QueueTypeName),在这些脚本中都提供 一个名称相同,而逻辑不同的函数,在队列服务程序加载的时候,可以建立一个 Dictionary,应用程序可以去扫描脚本目录,并将脚本名以及脚本中的函数以键 值对的形式添加到Dictionary中。发现已过期的队列后,就可以根据队列所处的 分类名,在Dictionary中查找相应的函数并调用即可。

使用脚本的好处:语法简单;可以直接修改脚本文件并保存,不用重新编译; 处理程序经常会出现Bug,并且处理程序的需求会经常发生改变,写成脚本方便修 改;当添加了新的处理程序时,也不用重新编译服务器代码,只要重新Load一次 脚本就可以实现计时服务的可扩展性了。

使用脚本语言的速度如何?速度肯定会慢一点点,但是你绝对感觉不出来!

总结,根据上面的描述,我们可以得到一个流程图,如下所示:

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号