关于lua对象的持久化,Pluto这个库很有威力

128 views
Skip to first unread message

Tang Daogang

unread,
Apr 29, 2012, 7:03:29 AM4/29/12
to bamb...@googlegroups.com
http://lua-users.org/wiki/PlutoLibrary

据说能持久化lua的任何对象。包括表,函数,协程,线程。

注:以我的理解来看,持久化与续列化有区别。续列化更侧重于将对象压缩成字符串,且是人能识别的的字符串。而序列化可以是压成二进制串。

--
Nothing is impossible.

Tang Daogang

unread,
Apr 29, 2012, 8:35:51 AM4/29/12
to bamb...@googlegroups.com
测试通过了。

在Ubuntu 12.04上,只有这个 https://github.com/hoelzro/pluto 才完成正确。

luarocks默认库,以及官方下载的包,测试都不通过的。

测试后,果然不同反响。

比如,持久化函数的时候,不但把函数的二进制code持久化了,还把对应的upvalues全部持久了。我靠。早知道有这个库,那我们的那个规则索引就很简单了啊,而且效率上可能还要高得多,因为这是二进制持久化。

不错。这个东西也有利于解决插件的共享参数问题。

2012/4/29 Tang Daogang <daoga...@gmail.com>



--
Nothing is impossible.

Tang Daogang

unread,
Apr 29, 2012, 8:45:19 AM4/29/12
to bamb...@googlegroups.com
这个东西,据网上说,可以做成一种进程间数据交换的方式。

2012/4/29 Tang Daogang <daoga...@gmail.com>



--
Nothing is impossible.

Lu Wenlong

unread,
Apr 29, 2012, 9:20:46 AM4/29/12
to bamb...@googlegroups.com

Proto Buffers

好似也是一种进程间交互数据的 格式,且语言中立
http://blog.codingnow.com/2010/08/proto_buffers_in_lua.html

2012/4/29 Tang Daogang <daoga...@gmail.com>



--
沒有理想走不遠,不面對現實連今天都走不過.
 


Tang Daogang

unread,
Apr 29, 2012, 10:04:40 AM4/29/12
to bamb...@googlegroups.com

好了,给bamboo添加这个功能了。

下面是使用方法:

当在页面模板中执行渲染tag时,进行数据持久化。

当调用插件提供的handler函数时,进行数据的反持久化。

可以提供一个plugin模块。里面一个持久化函数,一个反持久化函数。


在main函数中,需要对args进行持久化时,在插件开头引入

local plugin = require 'bamboo.plugin'

使用 plugin.persist(插件名称,args)

存入数据库中。


在插件的handler中,需要用到之前的args时,使用

local _args = plugin.unpersist(插件名称,_tag)

调出之前的参数表。直接用即可。



2012/4/29 Lu Wenlong <a88...@gmail.com>



--
Nothing is impossible.

Tang Daogang

unread,
Apr 29, 2012, 9:36:23 PM4/29/12
to bamb...@googlegroups.com
目前,bamboo对插件子模块的持久化有如下要点:

1. 持久化的时候,会抛弃任何元表;
2. 可以持久化函数和upvalue,但是不能持久化c实现的函数;
3. nil, string, number, table, function, thread都可持久化。

2012/4/29 Tang Daogang <daoga...@gmail.com>



--
Nothing is impossible.

Tang Daogang

unread,
Apr 29, 2012, 9:39:39 PM4/29/12
to bamb...@googlegroups.com
不过,pluto这个库进行持久化的时候,稍不留意就会遇到 Attempting to persist a C function. 的错误。

2012/4/30 Tang Daogang <daoga...@gmail.com>



--
Nothing is impossible.

Tang Daogang

unread,
Apr 30, 2012, 3:44:32 AM4/30/12
to bamb...@googlegroups.com
确实不错。云风大牛的作品。

Google 的那个东西确实很牛X。

另外发现,pluto用起来还挺讲究的。好用是好用,但要注意很多细节。

2012/4/29 Lu Wenlong <a88...@gmail.com>



--
Nothing is impossible.

Reply all
Reply to author
Forward
0 new messages