测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | Feb 2017 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Ahmad M. Zawawi 维护。
该库为 iOS、macOS、tvOS 和 watchOS 提供了易于使用的 ZeroMQ C++ 库的 Swift 绑定。它用 Swift 3 编写,并附带了一个捆绑的稳定 libzmq
库。它提供了 ZeroMQ 的低级 API 以及面向对象的 API。
ZeroMQ(也拼写为 ØMQ、0MQ 或 ZMQ)是一个高性能的异步消息库,旨在在分布式或并发应用程序中使用。它提供了一个消息队列,但与面向消息的中间件不同,ZeroMQ 系统可以在没有专用消息代理的情况下运行。库的 API 设计得类似于伯克利套接字。
请查阅 文档手册 获取更多信息。较旧示例也可以在 示例 Github 仓库中找到。
import SwiftyZeroMQ
// Print ZeroMQ library and our framework version
let (major, minor, patch, versionString) = SwiftyZeroMQ.version
print("ZeroMQ library version is \(major).\(minor) with patch level .\(patch)")
print("ZeroMQ library version is \(versionString)")
print("SwiftyZeroMQ version is \(SwiftyZeroMQ.frameworkVersion)")
import SwiftyZeroMQ
do {
// Define a TCP endpoint along with the text that we are going to send/recv
let endpoint = "tcp://127.0.0.1:5555"
let textToBeSent = "Hello world"
// Request socket
let context = try SwiftyZeroMQ.Context()
let requestor = try context.socket(.request)
try requestor.connect(endpoint)
// Reply socket
let replier = try context.socket(.reply)
try replier.bind(endpoint)
// Send it without waiting and check the reply on other socket
try requestor.send(string: textToBeSent, options: .dontWait)
let reply = try replier.recv()
if reply == textToBeSent {
print("Match")
} else {
print("Mismatch")
}
} catch {
print(error)
}
private let endpoint = "tcp://127.0.0.1:5550"
let context = try SwiftyZeroMQ.Context()
let publisher = try context.socket(.publish)
let subscriber1 = try context.socket(.subscribe)
let subscriber2 = try context.socket(.subscribe)
let subscriber3 = try context.socket(.subscribe)
try publisher.bind(endpoint)
let subscribers = [
subscriber1: "Subscriber #1",
subscriber2: "Subscriber #2",
subscriber3: "Subscriber #3",
]
try subscriber1.connect(endpoint)
try subscriber2.connect(endpoint)
try subscriber3.connect(endpoint)
// Brief wait to let everything hook up
usleep(1000)
// Subscriber #1 and #2 should receive anything
try subscriber2.setSubscribe(nil)
// Subscriber #3 should receive only messages starting with "topic"
try subscriber3.setSubscribe("topic")
// Brief wait to let everything hook up
usleep(250)
let poller = SwiftyZeroMQ.Poller()
try poller.register(socket: subscriber1, flags: .pollIn)
try poller.register(socket: subscriber2, flags: .pollIn)
try poller.register(socket: subscriber3, flags: .pollIn)
func pollAndRecv() throws {
let socks = try poller.poll(timeout: 1000)
for subscriber in socks.keys {
let name = subscribers[subscriber]
if socks[subscriber] == SwiftyZeroMQ.PollFlags.pollIn {
let text = try subscriber.recv(options: .dontWait)
print("\(name): received '\(text)'")
} else {
print("\(name): Nothing")
}
}
print("---")
}
// Send a message - expect only sub2 to receive
try publisher.send(string: "message")
// Wait a bit to let the message come through
usleep(100)
try pollAndRecv();
// Send a message - sub2 and sub3 should receive
try publisher.send(string: "topic: test")
// Wait a bit to let the message come through
usleep(100)
try pollAndRecv();
import SwiftyZeroMQ
do {
// Define a TCP endpoint along with the text that we are going to send/recv
let endpoint = "tcp://127.0.0.1:5555"
// Request socket
let context = try SwiftyZeroMQ.Context()
let requestor = try context.socket(.request)
try requestor.connect(endpoint)
// Reply socket
let replier = try context.socket(.reply)
try replier.bind(endpoint)
// Create a Poller and add both requestor and replier
let poller = SwiftyZeroMQ.Poller()
try poller.register(socket: requestor, flags: [.pollIn, .pollOut])
try poller.register(socket: replier, flags: [.pollIn, .pollOut])
try requestor.send(string: "Hello replier!")
// wait to let request come through
sleep(1)
var updates = try poller.poll()
if updates[replier] == SwiftyZeroMQ.PollFlags.pollIn {
print("Replier has data to be received.")
}
else {
print("Expected replier to be in pollIn state.")
return
}
try _ = replier.recv()
updates = try poller.poll()
if updates[replier] == SwiftyZeroMQ.PollFlags.none {
print("All data has been received")
}
else {
print("Expected replier to be in none state.")
return
}
} catch {
print(error)
}
版权©2016-2017 Ahmad M. Zawawi,在MIT许可证下。