使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件
一、前言
AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。
AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。
AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。
二、关于Lua语言
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua语言目前应用最广泛的领域是游戏编程领域,最早接触和认识Lua也是因为在2008年玩金山的剑网3,通过解包读过其中的一些游戏脚本,慢慢也看过一些其他游戏的Lua脚本,在我们开发自己的电子病历系统的过程之中,引入了Lua脚本语言实现那些可变性非常高的场景。
.NET通过LuaInterface开源项目类库实现对Lua的脚本调用以及Lua与C#的相互绑定,有关于这此方面的内容请大家搜索相关文章以获得帮助。
在AgileEAS.NET SOA5.0版本之中,我们决定把在开发过程之中形成的Lua脚本引擎一并集成入AgileEAS.NET SOA中间件平台,目前Lua脚本语言被我们广泛的应用电子病历系统这中的病案自动评分、短信系统之中的交互式应答、和一些计划任系统之中的计划任务定义。
三、AgileEAS.NET SOA平台Lua引擎
AgileEAS.NET SOA5.0平台目前使用的是Lua5.1版本,使用LuaInterface实现C#与Lua的相互绑定处理,平台已经对其进行了二次封装以提供统一的API支持,目前由EAS.LuaScript.dll程序集承载所有业务。
AgileEAS.NET SOA平台Lua引擎提供了以下接口或类型的API:
ILuaEngine,定义为一个Lua脚本引擎:
1:using System;
2:
3:namespace EAS.LuaScript
4: {
5:/// <summary>
6:/// Lua脚本解析引擎。
7:/// </summary>
8:/// <remarks>
9:/// 用于完成程序之中嵌入的动态Lua脚本,Lua脚本在AgileEAS.NET SOA 中间件之中主要用于环境的各种参数的动态解析处理之中。
10:/// </remarks>
11:publicinterface ILuaEngine:IDisposable
12: {
13:/// <summary>
14:/// 脚本路径。
15:/// </summary>
16:string ScriptDirectory
17: {
18: get;
19: set;
20: }
21:
22:/// <summary>
23:/// 输出重定向方法/用于调试。
24:/// </summary>
25: Action<object> OutAction
26: {
27: get;
28: set;
29: }
30:
31:/// <summary>
32:/// 注册lua函数,实现Lua绑定。
33:/// </summary>
34:/// <param name="luaAPIClass">lua函数类</param>
35:void BindLuaFunctions(object luaAPIClass);
36:
37:/// <summary>
38:/// 执行lua脚本文件。
39:/// </summary>
40:/// <param name="luaFileName">脚本文件名。</param>
41:/// <returns>lua脚本执行结果。</returns>
42:object[] DoFile(string luaFileName);
43:
44:/// <summary>
45:/// 执行lua脚本文本。
46:/// </summary>
47:/// <param name="chunk">lua指令。</param>
48:/// <returns>lua脚本执行结果。</returns>
49:object[] DoString(string chunk);
50:
51:/// <summary>
52:/// 调用Lua函数。
53:/// </summary>
54:/// <param name="luaFunction">函数名称。</param>
55:/// <param name="args">调用参数。</param>
56:/// <returns>lua脚本执行结果。</returns>
57:object[] Invoke(string luaFunction, paramsobject[] args);
58: }
59: }
其中脚本路径ScriptDirectory指示Lua脚本文件的存储位置,在DoFile执行脚本文过程之中如果传入为相关路径则可以自动在ScriptDirectory之中寻址,ScriptDirectory默认为当前程序目录。
DoFile:执行脚本文件并且返回执行结果。
DoString:执行脚本代码并且返回执行结果。
Invoke:执行指定的脚本函数。