ulua群里面讨论的另一种方案笔记(1)

今晚在ulua群1里面跟蒙哥、大C、Felicia、不说害怕等人一边看云风大神的Lua C API的文章(http://blog.codingnow.com/2015/05/lua_c_api.html),一边讨论,看完文章后,我突然有个想法:
看了他文章我有个模糊想法,如果一个类有一个单个接口给lua,然后完全通过内部实现协议来进行调用,类似于socket协议,附加参数,这样会不会就是他所谓的统一,并且接口简单。这样捕捉异常也就简单很多了。

然后根据这个想法,大家就讨论了很久,优利弊都列举了很多,其中Felicia他们还早就实践了这种方案,所以记录下来,以备后人可以完善发挥,应用扩展吧。谈下优缺点:

优点:

(1)安全隔离:云神文章说的很清楚,非常不推荐用户直接操作luastate,也就是LuaDLL的API,一律不要动,让ulua/cstolua引擎去操作,你不熟悉,很容易搞崩溃。所以有了LuaScriptMgr.cs的包装层,那就是隔离,其实上面的方案的隔离效果是最好的,c#与lua只有一个wrap接口,各自处理自己的部分,互相不干涉,这样c#的异常也不会渗透进lua的虚拟机里面。

(2)Wrap尺寸优化:用了上面方案,一个wrap文件从几个接口到几百个接口不等的数量,猛的将为1-n个,这样注册进lua虚拟机的接口少了,速度自然会有几倍甚至上百倍的提升。

(3)安装包大小优化:因为wrap的文件急速减少,因此unity在il2cpp的层面上,生成的安装包大小就会非常紧凑,小很多。

缺点:

(1)不好调试:现在ulua已经完美集成跟zerobrane studio的调试功能,但是如果用了这种过渡一层的方式,lua代码不好直接调用到c#函数,对调试带来一定影响。

(2)逻辑复杂:因为与socket与服务器通讯的方式是一样的,需要实现的逻辑算是中转了一层,所以逻辑会比直接调用要麻烦些。

(3)性能损失:蒙哥一直觉得这种双查表的方式,实际上会损失部分性能,这也是他不怎么赞成的原因。

(4)传参麻烦:因为这种方式对于传参实际上需要包装的收发设计。


终上所述,一种方案都会有各自的优利弊,这个不可避免,很多人都是选择适合自己的方案,比如:Felicia,他们开了一个线程跑这种方式,主从线程通过协议进行通信,大大提升了执行效率,他觉得益于线程和这种设计。以此笔记,有需要的同学可以借鉴,甚至完善发挥~

[本日志由 admin 于 2015-09-23 11:50 AM 更新]
上一篇: ulua怎么集成使用sqlite?
下一篇: ulua里面怎么判断Unity对象为空?
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭