Examples: set/get option
auto sock = NanoSocket(NanoSocket.Protocol.subscribe); sock.getOption!int(NanoSocket.Option.sendTimeoutMs).shouldEqual(-1); sock.setOption(NanoSocket.Option.sendTimeoutMs, 42); sock.getOption!int(NanoSocket.Option.sendTimeoutMs).shouldEqual(42);
publish/subscribe
const uri = "inproc://test_pubsub"; auto pub = NanoSocket(NanoSocket.Protocol.publish, BindTo(uri)); auto sub = NanoSocket(NanoSocket.Protocol.subscribe, ConnectTo(uri)); sub.setOption(NanoSocket.Option.subscribeTopic, "foo"); // messages that start with the subscription topic should be received pub.send("foo/hello"); sub.receive(No.blocking).shouldEqual("foo/hello"); // but not messages that don't pub.send("bar/oops"); sub.receive(No.blocking).shouldBeEmpty; // after unsubscribing, messages are no longer received sub.setOption(NanoSocket.Option.unsubscribeTopic, "foo"); pub.send("foo/hello"); sub.receive(No.blocking).shouldBeEmpty;
request/response
import std.concurrency: spawnLinked, send; const uri = "inproc://test_reqrep"; const requester = NanoSocket(NanoSocket.Protocol.request, ConnectTo(uri)); enum timeoutMs = 50; requester.setOption(NanoSocket.Option.receiveTimeoutMs, timeoutMs); auto tid = spawnLinked(&responder, uri, timeoutMs); requester.send("shake?").shouldEqual("shake? yep!"); tid.send(Stop());