在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Lua引擎语言特点
源码简单,以lua最新版5.3.5为例,加上lua自身提供的lib库,仅30多个.c文件,编译后仅200多k,strip后经upx压缩,可控制在100k以下。
小巧灵活,支持闭包,有GC机制,通过语法糖可实现面向对象编程,提供了通用类型table,可实现数组、map和对象。
lua语言本身和lib库由标准C语言编写,可在windows、*nix等各种环境编译运行。
lua提供了易用的扩展接口机制,和C相互调用非常方便。 Lua引擎应用场景
运行环境苛刻,对CPU、内存等资源占用情况有严格限制
对性能敏感,功能更新不希望全量升级,需要增量更新或热更新 Lua引擎客户端实践1、客户端常用语言和技术选型
开发效率高,但需要环境自带脚本执行环境,有语言版本兼容性问题,适合比较统一的环境
自包含、跨平台,支持交叉编译,编译出的可执行文件仅依赖libc,部署方便
编译生成的可执行文件小、移植性强、性能高,但开发、调试比较费劲 2、Lua客户端研发目标
Lua客户端工作模式分析lua启动时创建lua虚拟机,加载lua lib和用户实现的C库,读取lua脚本文件,开始解析和执行。
1、Lua客户端研发分析理解lua工作模式后,我们的客户端设计分为两部分。第一部分是C模块:
2、Lua客户端之编译原理为了保证客户端尽量小,且没有第三方依赖,我们最终会把C模块和lua脚本编译打包到一起,整个客户端是独立的可执行文件。
至此,我们实现了由lua实现业务逻辑,C提供lib库的客户端,和golang一样,客户端可在macos、linux、windows编译执行,本身只有一个可执行文件,但却非常轻量级。以京东云的部署客户端为例,客户端包含json、socket、http、mbedtls(类似openssl)等库,加上实现部署业务的lua脚本,整个客户端仅100多k! Lua引擎之扩展操作1、加密及代码混淆在一些闭源的场景,我们并不希望lua源码被直接看到。lua作为一门脚本语言,即使通过luac编译成字节码,源码也能被工具反编译出来。为了对抗反编译,我们可以调整lua opcode表、修改版本和lua头等。
2、自动更新lua脚本在编译成字节码,压缩后比较小,利用这一特性,我们可以在server端提供编译压缩好的lua脚本,客户端只需下载执行脚本,就实现了自动更新和热更新 3、一些花操作
在互联网公司,lua普及程度是次于js的。通常服务端js指nodejs,node比较重,写客户端显得不太合适。得力于lua和js相近的语言特性,如闭包、匿名函数等,js脚本可通过js2lua转换成lua,于是,我们可以用js、甚至typescript实现业务逻辑,编译转换成lua脚本,实现轻量级客户端
C和lua本身都是跨平台的,但实际开发过程中,可能初期只考虑了对linux的支持,为了快速开发,代码中出现大量shell调用。当开始需要支持windows,一种办法是重写shell调用部分的代码,工作量相当于重构。
点击“阅读”了解更多京东云翼产品 欢迎点击“京东云”了解更多精彩内容 |
请发表评论