论坛首页 综合技术版

嵌入式脚本在项目中的应用

浏览 3672 次
该帖已经被评为良好帖
作者 正文
最后更新时间:2006-10-22 关键字: 嵌入式脚本 lua wsh
用脚本语言编写的项目在代码修改,项目部署,运行配置的方便性,是编写应用程序的人眼红的地方。使用脚本语言,专业用户可以很方便的自己修改或者做些二次开发。

  在想要利用编译语言的各种优点,又想方便配置甚至可以让专业用户自己修改逻辑或是二次开发的项目中。嵌入式脚本语言就派上了很大用处。在项目中加入嵌入式脚本语言,以牺牲部分运行性能来换得部分维护和分发便利性。从长期成本来说还是可以接受的。嵌入式脚本的存在也使得编译语言和脚本世界之间搭了桥梁,不至于大家老死不相往来。

  嵌入式脚本语言最容易发挥力量的场所是允许(需要)专业用户自己更改部分业务逻辑的yy应用系统。比如嵌入式语言在游戏中就有很多应用,魔兽争霸RPG地图的编制,无冬之夜的各种mod,博得之门的调试接口,还有QQ的部分游戏,等等全部用到了嵌入式脚本语言。有的使用lua,用的使用python.最出名的大概就是wow客户端了。它使用了lua,允许玩家们自己更改界面,甚至加入原先并不在的功能。

  同样的在商业上,需要用户定制,但是框架完全相同的项目也是常有的。在这样的项目中引入脚本系统无论从哪个角度上来说都是合乎利益的。项目只要提供一批安全的核心接口给嵌入式脚本系统,就可以任由用户在合理范围内折腾,而不用伤筋动骨。而且还解决了纯脚本语言项目的代码安全保护问题

   对于24x7运行的应用服务器,嵌入式脚本语言给项目带来的好处有以下一些

   A。不间断运行,同时调试应用服务器:
  
   对于一个已经发布,并在运行的应用服务器来说,出些小毛小病是很正常的一件事情了。如果没有使用嵌入式脚本,想修改bug,只能通过综合分析输出各种log来试图确定bug发生位置。如果log输出不够完整,很容易进入 “增加log”-〉“运行一段时间”-〉“检测Log“这样圈子。开发人员不得不关闭正在服务中的应用服务,更新一个只是加入了几个log输出的版本,然后再运行,再测试。这样的做法无论从哪个方面来说都是不可接受的。
   
   嵌入脚本系统之后,可以在项目中事先加入提供给脚本系统调用的debug接口和log接口,来输出和测试应用服务器的各种内部状态。虽然无法完全避免这种停机检测。但是可以减少停机检测次数。

   各位玩过 博得之门和无冬之夜的朋友应该知道,这两个游戏所谓的作弊码,完全是一个一个的函数调用。存在这些函数是为了测试和调试游戏,比如武器测试,场景测试。同样的方式完全可以加入到应用服务器中。

   B。动态修改运行配置:

   应用服务器有不少配置数据都是启动时读取并运行的,一般运行过程中,不会再考虑重新读取并重置服务器状态。如果需要改动,那么多半都是是需要重新启动应用的。一个高并发的应用服务器程序经常需要收集log信息和运行统计数据,比如并发数,丢弃和接收的数据包。这些数据完全可以通过嵌入式脚本输出,比如原先统计数据是存入数据库,而现在需要通过email来通知给管理员。类似这些运行配置的变动,通过脚本系统,可以非常灵活的调整而不影响被服务的客户。


   C。运行时添加和修改逻辑功能:

   对于专业用户,按需要扩展应用服务器,是完全有必要的。比如企业管理系统中的工资计算部分,每一个单位的工资计算方式都是各有一套,不加入脚本,就要针对各个企业重新编写了,发布不同的版本。引入脚本系统,只需要编写一段脚本代码,就能够让系统适应各自单位。这是多爽的一件事情。
  
   嵌入式脚本的引入,使得项目能够利于编译语言的各种好处之外,又带入了脚本语言的各种方便之处。虽整体性能最终有所下降,不过最终整体优点却是有增无减的。当然实际效果还要看项目需求。

   下面来简单说下项目中遇到过的脚本语言。

   嵌入式脚本语言lua,lua完全是为了嵌入而存在的脚本语言。各个平台都可以使用,性能也不错。在很多游戏客户端中都能够看到,从各种文档上来看,lua用于游戏服务器上的也不少。宿主语言使用c/c++,脚本代码和宿主语言的相互调用也比较便利。调用脚本,可以选择调用某些函数。

    WSH,Windows Script Host,这个只存在windows系统,宿主语言随意,只要能够调用com就能够调用wsh,调用方法比较繁复。不过wsh有个非常便利的好处,就是wsh本身也是一个host,可以调用多种脚本语言,比如windows平台上一定存在的vbscript,jscript,还有用户自己安装的,在wsh中注册过的各种脚本语言。最终用户可以选择自己最熟悉的脚本语言编写脚本。
   
最后更新时间:2006-10-24
脚本很灵活,这点不假,实惠也很多
但是我对脚本的看法是---脚本是毒药
脚本是拖累系统的重要元凶,所以使用的时候一定要小心,原则上脚本最好只用在配置和初始化之用,尽量不要用于逻辑执行
   
0 请登录后投票
最后更新时间:2006-10-24
脚本用在合适的地方会很好,特别是相对于有些人用xml配置某些运算逻辑,这种地方用脚本更有优势。

但是逻辑大了,还是用编译类的语言如java更合适。
脚本可以调用java,就解决问题了。
   
0 请登录后投票
最后更新时间:2006-10-25
现在有一个java,web应用的项目,里面有一些计算公式,
客户希望能够可配置,但现在变动需求还不太明确.

如果用嵌入式脚本的话,可以有些什么方案呢?
有人建议用OGNL, 也有建议用javacc方式.

没接触过这块,想听听有什么方法.
   
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
JavaEye推荐