`
tower
  • 浏览: 243937 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

将lua嵌入C++中用来做计费系统的批价

阅读更多

本文原创作品,如需转载请注明来源,作者:姜涛, towerjt@gmail.com

 

在电信的计费系统中,所用的语言基本都是 C C++ ,应该是基于速度优势,至少目前国内还很少听说用别的语言来做计费系统的。而对于繁杂的定价计划,一般的处理有两种:

1 、通过数据模型描述

2 、通过脚本语言描述


两者都各有优势,对于前者而言,优势在于设计优秀的数据模型是完全能够描述大部分的批价形式,如果能有比较友好的配置界面支持的话,定义严格的批价规则能被很好的使用。 Y 由于依然完全基于原生的 C 或者 C++ 语言的,所以性能上应该能得到保证。

通过数据模型来描述规则的核心思想,类似于通过数据模型来构建一个语法树,所以不可避免的复杂性会让开发人员以及后来的配置人员挠头。有时候一个很简单的 if else then 的规则,实现起来却是很复杂的,而且配置好后的规则,如果比较复杂的话,可读性又会比较差——除非配置的 UI 能很好的解释。

同时,通过数据模型来描述计费规则有一个扩展性的问题,如果数据模型设计得不够通用的话——谁能够保证面面俱到呢——一旦有不是很好描述的规则的话,极有可能要修改数据模型。


基于上面的问题,通过脚本语言来描述计费规则是一个比较好的替代方法, Lua 作为一个非常适合嵌入 C/C++ 程序的一个脚本语言,能很方便的调用宿主语言( C/C++ )的函数,同时又能很方便的被宿主语言可调用。

Lua 来描述计费规则的过程大致如下:

<!-- -->1、  <!-- -->将相关的计费要素的访问做好封装,注册成 Lua 能调用的函数。一般来说,这种计费要素多是存储在数据库中的记录,根据需要,可以封装一些必要的访问方法。

<!-- -->2、  <!-- -->Lua 的批价函数接受一个计费事件,计费事件可以抽象成一些 ATTRIBE-VALUE 值,这个在 Lua 中是很容易用 TABLE 来表示的。

<!-- -->3、  <!-- --> Lua 的批价函数接受的参数是一个表,其他系统传过来的是一个 xml ,解析完后形成一个 TABLE 传给批价函数

<!-- -->4、  <!-- -->批价函数中可以根据传入的计费事件,做相关处理,在处理的过程中,如果需要访问一些参考值或参考对象的话,可以通过调用第一步中封装的函数来操作。


这周基本就是在做这个 DEMO ,已经基本成样子了,下周应该把它完善一下。


分享到:
评论
3 楼 zhulinyun124 2010-04-25  
楼主应该是对批价系统很熟悉了啊。对于后一种,运用脚本,用计算代替模型应该是以后的发展方向。因为这样不需要一个复杂而全面的模型把所有的业务需求都涵盖进去。脚本计算能做得快速的响应,然后在慢慢的沉淀出这些脚本。现在有个问题是这些脚本基本上是基于非结构化数据的,在存储方面,可能就是这个xml描述或是脚本片段。在批价的运行时是简单方便了很多。但是对于计费要素或是计费时需要传入的计费参数等静态数据,是否还需建立在模型之上。
   我要问题是,这种基于脚本的,对于存储你们是怎么设计的。哪些东西还是采用老的基于模型的,哪些是采用了非结构化存储。他们是怎么结合起来的。
   有时间可以交流一下。
2 楼 tower 2009-05-05  
lizewu 写道

楼主能否共享一下这个demo呢……


不成,只能说说,不好意思,请谅解
1 楼 lizewu 2009-05-05  
楼主能否共享一下这个demo呢……

相关推荐

    lua_test.rar_C++_c# lua_c++ lua_lua_lua调用C++

    `tolua_function`宏用于将C++函数绑定到Lua,`myFunctionWrapper`是C++中的一个包装函数,用于处理Lua和C++之间的类型转换。 总结来说,这个"lua_test.rar"实例展示了如何在C++项目中集成Lua,以及如何从Lua脚本...

    lua 调用 c++ dll 示例

    在IT领域,有时候我们需要在不同的编程语言之间进行交互,例如使用脚本语言 Lua 调用 C++ 编写的动态链接库(DLL...通过理解这些原理,开发者可以灵活地将 C++ 的强大功能融入到 Lua 脚本中,提高项目的效率和灵活性。

    LUA调用C++类

    - 在C++中定义`lua_open`和`lua_close`函数,用于初始化和清理LUA环境。 2. **C++类封装**: - 创建C++类的静态库,包含类的定义和实现。确保类的公共方法是可导出的,以便LUA可以访问。 - 如果有私有或保护...

    lua和c++交互

    比如,当在C++中创建了一个对象并传递给Lua后,可能需要在C++中管理这个对象的生命周期,以防止内存泄漏。 6. **性能优化**:虽然Lua执行速度快,但相比C++仍有差距。对于性能敏感的部分,可以使用C++编写,然后...

    lua调用C++函数

    3. **Lua的调用约定**:在C++中,你需要使用`luaL_register`或`lua_register`函数将C++函数导出给Lua。这些函数需要一个lua_State指针和两个字符串参数,分别代表函数名和对应的C++函数指针。 4. **C++函数处理Lua...

    lua_code.zip_Lua嵌入_exe-hreader_lua_lua c_lua c++

    在IT行业中,将Lua嵌入到C/C++应用程序中可以极大地提高代码的灵活性和可扩展性,使得开发者能够利用Lua的简洁语法和动态特性来编写控制逻辑或处理复杂任务,同时保持C/C++的高性能和底层控制能力。 首先,我们要...

    Lua的最基本使用 C++与lua的互相调用

    1. 注册C++函数:在C++中,你需要使用`lua_register`或`lua_CFunction`定义一个C++函数,使其能在Lua中调用。例如: ```cpp static int myCppFunction(lua_State *L) { // 获取参数并进行操作 int arg = lua_to...

    Lua与C++的交互

    本项目重点展示了如何在C++中集成Lua,实现两者之间的交互,特别适用于初学者理解这一过程。 **描述分析:** 这个项目来源于一本关于Lua游戏开发的书籍,其目标是通过一个精简版的TakeAway游戏,直观地展示Lua脚本...

    lua+c++ vs2013

    4. 交互:在C++中,你可以通过`lua_pcall`来调用Lua函数,并传递参数。在Lua脚本中,你可以直接调用之前注册的C++函数。 5. 错误处理:在调用Lua函数时,应检查返回值以处理可能出现的错误。 压缩包中的“2.first...

    use_Lua.rar_c++ lua_lua_lua C++ 嵌入_lua vc

    Lua的灵活性在于它的轻量级和强大的元表机制,使得在C++中定义复杂的数据结构和行为变得容易。例如,通过元表,你可以模拟出面向对象的特性,实现类和对象的概念。 总之,"vc++中嵌入动态解析语言Lua"的示例展示了...

    Lua调用C++函数实现

    本文将深入探讨如何在 Lua 中调用 C++ 函数,实现两者之间的交互。 首先,我们要理解 Lua 和 C++ 之间的接口是如何建立的。这主要通过 Lua 的 C API 实现,它提供了一套 C 函数供外部语言(如 C++)调用,同时也...

    lua的C++访问封装version2

    当C++与Lua结合时,访问封装通常涉及到在C++中定义的类如何被Lua脚本调用和控制,以及如何在Lua中安全地访问C++的对象和功能。 在“Version2”中,我们可以预期开发者已经对前一版进行了优化,可能包括性能提升、...

    脚本技术lua与C++的结合

    通过Lua与C++的结合,开发者可以在C++中编写核心逻辑和性能敏感的部分,而在Lua中编写更易变和灵活的业务逻辑。 结合的关键在于Lua的绑定机制,即通过Lua C API或第三方库如SWIG、LuaBridge等将C++函数和类暴露给...

    Lua的使用入门之在C++程序中调用lua函数1

    通过`luaL_newstate()`函数可以创建一个新的Lua环境,并通过`luaL_openlibs()`打开标准库,这样就可以在C++中使用Lua的基本功能了。 2. **加载和执行Lua脚本** 使用`luaL_dofile()`或`luaL_dostring()`函数加载并...

    c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源

    c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包c++ lua 框架资源包...

    lua调用C++的经典实例.rar

    - 注意内存管理,C++中的动态分配内存需要在Lua中释放,反之亦然,避免内存泄漏。 通过以上步骤,我们可以成功地在Lua中调用C++函数,实现两种语言的高效协同。这个实例不仅展示了如何在实际项目中结合使用Lua和...

    lua调用C++_c2lua

    在实际开发中,lua经常被用来作为C++应用程序的接口,使得程序员能够用lua编写易于维护和扩展的控制逻辑。"lua调用C++_c2lua"这一主题,正是关注于如何通过工具c2lua实现lua与C++之间的交互。 c2lua是专门为lua和...

    linux环境中c++调用lua动态链接库以及编译方法

    本文将深入探讨如何在C++程序中调用Lua动态链接库,并讲解其编译过程和环境配置。 首先,我们需要理解Lua的动态链接库(liblua.so)。Lua是一个轻量级的脚本语言,它的动态链接库允许C/C++程序直接嵌入和调用Lua...

    LuaAction C++访问LUA函数

    通过LuaAction,开发者可以在C++中直接调用这些包或表内的函数,极大地增强了代码的灵活性和可扩展性。 其次,LuaAction支持传递任意数量的参数和接收任意数量的返回值。这种灵活性使得C++和Lua之间的接口设计更加...

    lua 绑定c++ 详细教程!

    - **配置环境变量**:添加系统变量`ANDROID_NDK_ROOT`,并将值设为NDK的安装路径(例如`D:\Android\android-ndk-r9b`),然后将该变量添加到`Path`系统变量中。 ##### 3. 安装PyYAML - **下载地址**:...

Global site tag (gtag.js) - Google Analytics