代码改变世界

Zookeeper 的 Lua 绑定

2013-04-07 00:07  Haippy  阅读(5206)  评论(1编辑  收藏  举报

最近似乎喜欢上了 Lua(关于 Lua 本文就不作更多的介绍了,详见 Lua 官方页面),作为一门嵌入式语言,Lua 确实小而美,设计精巧,让人不得不感叹 Lua 作者的智慧和良苦用心。

以前写过一些有关 Zookeeper C API 的文章,自己觉得对 Zookeeper  C API 比较熟悉,就想能不能利用 Zookeeper C API 给 Zookeeper 写一个 Lua 绑定呢,Google 一下发现以前也并没有人给 Zookeeper 贡献过 Lua 接口,python,ruby,GO,Node.js 等都有,连 Perl 官方都提供了接口,唯独缺 Lua,所以就想自己动手实现一个,并取名为 zklua,清明在实验室宅了两天(第三天和师兄以及几个好友去爬京西古道,走了接近15公里,当时感觉腿都废了,还是要经常锻炼,IT 男身体最重要了),不过还是把 zklua 的代码框架搭起来了,实现了部分 API,接下来就是填剩下的 API 了,争取利用四月份的空余时间写完,现在还幻想着写好 zklua(构建,文档,代码风格之类的细节)了以后能够回馈到Zookeeper社区,代码先截个图:

 

目前部分 API 已经可以用了,以 zklua.adelete() 为例,调用方法如下:

require "zklua"

function zklua_my_watcher(type, state, path)
    if type == zklua.ZOO_SESSION_EVENT then
        if state == zklua.ZOO_CONNECTED_STATE then
            print("Connected to zookeeper service successfully!\n");
         elseif (state == ZOO_EXPIRED_SESSION_STATE) then
            print("Zookeeper session expired!\n");
        end
    end
end

function zklua_my_void_completion(rc, data)
    print("zklua_my_void_completion:\n")
    print("rc: "..rc.."\tdata: "..data)
end

zklua.set_log_stream("zklua.log")

zh = zklua.init("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", zklua_my_watcher, 10000)

ret = zklua.adelete(zh, "/zklua", -1, zklua_my_void_completion, "zklua adelete.")
print("zklua.adelete ret: "..ret)

print("hit any key to continue...")
io.read()

最后,我在 github 给 zklua 建了个仓库(zklua),但是由于目前最终的接口还没有完全实现,某些接口也还没有稳定下来,本着负责任的态度,代码暂时并没有提交到 github 仓库中,不过对 zookeeper 和 lua 都感兴趣的同鞋可以先 star 一下,争取利用 4 月的空余时间完成 zklua ;-)。