最近似乎喜欢上了 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 ;-)。