zoukankan      html  css  js  c++  java
  • Zookeeper 的 Lua 绑定

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

  • 相关阅读:
    DHCP服务的配置(linux)
    LVM逻辑卷
    python的元素列表
    DOS和DDOS你知道多少?
    DOS与DDOS攻击的原理与防范之法
    常见HTTP状态代码,http报错代码翻译
    TCP和UDP优缺点
    DLL何时需共享内存管理器
    Delphi 指针大全
    Delphi编写DLL(以及静态和动态方式调用)
  • 原文地址:https://www.cnblogs.com/haippy/p/3003249.html
Copyright © 2011-2022 走看看