• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

zkClient4Swift: Swift写的zookeeper客户端

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

zkClient4Swift

开源软件地址:

https://gitee.com/xycm/zkClient4Swift

开源软件介绍:

a simple Apache Zookeeper Client for apple swift lang

zkClient4Swift is a simple zookeeper client written in swift2 . Therefore,it requires xCode 7 to compile.

Swift已经开源了,并且支持Linux上运行.以后Swift不仅仅可以用来写IOS程序,还可以来做其他的后端程序甚至服务端程序.而Zookeeper在分布式服务系统中是必须的基石,像codis,kafka等都需要依赖zookeeper.因此,需要涉及到zookeeper的连接,而我在网上搜索了一遍,目前还没有Swift的Zookeeper的客户端.因此,就自己实现了一个,目前可能还不完善,有需要的兄弟自取吧.

Features

  • zookeeper服务器的连接 OK
  • 节点的基本操作 OK
  • 节点变化的监听 OK
  • 断线重连,网络闪断重试 断线重连 OK 网络闪断TODO
  • 基于framework做一个Mac版的ZK的本地客户端.现在大家都是用的ZooInspector.jar TODO

issues

已知问题:

  • 在MACOS上 需要把zookeeper的session超时时间设置为20秒以上. 因为心跳的线程,不知道为什么,有时会卡住11秒左右...发现是sleep(1)这个地方卡住的,还没有找到原因. 但是在IOS上就没有发现这个问题...

Blog:

翔妖除魔的个人博客

api usage

create client

//create a zkClient connect to 127.0.0.1 and port at 2181//TODO not supoort zookeeper clusterlet zkClient = ZkClient(serverstring: "127.0.0.1:2181")

connect to Zookeeper

zkClient.connect()

get Children Node

let children = zkClient.getChildren("/hello")for child in  children! {    print("subNode:\(child)")}

check Node exists

print("check node exists:\(zkClient.exists("/aaaaaaa"))")

delete the node

print("delete successed:\(zkClient.delete("/Hello/delete"))")

create the node

//create node by CreateMode.PERSISTENTtry zkClient.create("/Hello/create2", model: CreateMode.PERSISTENT)//create node by CreateMode.PERSISTENT and need create parenttry zkClient.create("/Hello2/create2",model: CreateMode.PERSISTENT,createParents:true)//create node by CreateMode.PERSISTENT with datatry zkClient.create("/Hello/create", data: "试一试中文", model: CreateMode.PERSISTENT)

read the node data

//default type is StringzkClient.readData("/Hello/create")

write the node data

//write String to nodetry zkClient.writeData("/Hello/create2",data: "试一试写入数据")

subscribe child changes

zkClient.subscribeChildChanges("/Hello", listenerName: "HelloChildChanges") { (path, children) -> Void in            print("路径:\(path)子节点发生变化:")            if let cc  = children {                for c in cc {                    print("\(c)")                }            }        }

subscribe node data changes

zkClient.subscribeDataChanges("/Hello/Byte", listenerName: "ByteNodeDataChanges") { (path, data) -> Void in            print("路径:\(path)节点内容发生变化,新的内容为:\(data)")        }

subscribe node delete

zkClient.subscribeDataDelete("/Hello/Byte", listenerName: "ByteNodeDelete") { (path) -> Void in            print("路径节点:\(path)被删除")        }

unsubscribe child changes

zkClient.unsubscribeChildChanges("/Hello", listenerName: "HelloChildChanges")

unsubscribe node data changes

zkClient.unsubscribeDataChanges("/Hello", listenerName: "HelloChildChanges")

unsubscribe node data delete

zkClient.unsubscribeDataDelete("/Hello/Byte", listenerName: "ByteNodeDelete")

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap