Rand Stats

Net::NNG

cpan:SAMGWISE

Build Status

NAME

Net::NNG - NanoMSG networking with libnng

SYNOPSIS

use Net::NNG;

my $url = "tcp://127.0.0.1:8887";

my $pub = nng-pub0-open;
nng-listen $pub, $url;

my @clients = do for 1..8 {
    start {
        CATCH { warn "Error in client $_: { .gist }" }

        my $sub nng-sub0-open;
        nng-dial = $sub, $url;
        for 1..15 -> $client-id {
            nng-subscribe $sub, "/count";

            # Take the number at the end of the /count message
            say "Client $client-id: ", nng-recv($sub).tail.decode('utf8')
        }
        nng-close $sub
    }
}

my $server = start {
    CATCH { warn "Error in server: { .gist }" }

    for 1..15 {
        nng-send $pub, "/count$_".encode('utf8');
        sleep 0.5;
    }
}

await Promise.allof: |@clients, $server;

nng-close $pub

DESCRIPTION

Net::NNG is a NativeCall binding for libnng a lightweight implementation of the nanomsg distributed messaging protocol. By default supported transports are inproc, IPC and IP. Additional transport layers such as TLS, Websockets and ZeroTier can be included when the library is compiled.

This is currently an early release and isn't yet feature complete but provides usable subscribe/publish, request/reply and survey/responder patterns. Other patterns currently offered by libnng such as the bus patterns are yet to be included in this interface.

This module does not yet handle providing you with a libnng library on your system so you will need to either build or install the library yourself. If you are compiling from source be sure to provide the -DBUILD_SHARED_LIBS option when building the cmake project else you will only be build static objects.

AUTHOR

Sam Gillespie samgwise@gmail.com

COPYRIGHT AND LICENSE

Copyright 2018 Sam Gillespie

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

multi sub nng-setopt

multi sub nng-setopt(
    Net::NNG::NNGSocket $socket,
    Str $name,
    Str $value
) returns Mu

Set a string option for a socket. An options enum is defined in Net::NNG::Options.

multi sub nng-setopt

multi sub nng-setopt(
    Net::NNG::NNGSocket $socket,
    Str $name,
    Bool $value
) returns Mu

Set a boolean option for a socket. An options enum is defined in Net::NNG::Options.

multi sub nng-setopt

multi sub nng-setopt(
    Net::NNG::NNGSocket $socket,
    Str $name,
    Int $value,
    Bool :$ms = Bool::False
) returns Mu

Set an integer value for an option on a socket. If the option is a millisecond value, passing the named ms flag. An options enum is defined in Net::NNG::Options.

sub nng-subscribe

sub nng-subscribe(
    Net::NNG::NNGSocket $socket,
    Str $header
) returns Bool

Set an active subscription on a socket You must subscribe with a header to receive messages on subscription socket. The header can be any string and will also be present in the blob of the received message. Returns True on success and a Failure on error.

sub nng-req0-open

sub nng-req0-open() returns Net::NNG::NNGSocket

Creates a new request (version 0) socket for making requests to a reply socket. Returns a NNGSocket pointer or Failure on error.

sub nng-rep0-open

sub nng-rep0-open() returns Net::NNG::NNGSocket

Creates a new reply (version 0) socket for responding to requests. Returns a NNGSocket pointer or Failure on error.

sub nng-pub0-open

sub nng-pub0-open() returns Net::NNG::NNGSocket

Create a new publish (version 0) socket for sending to subscribers. Returns a NNGSocket pointer or failure on error.

sub nng-sub0-open

sub nng-sub0-open() returns Net::NNG::NNGSocket

Create a new socket for subscribing to a publisher socket. Returns a NNGSocket pointer or failure on error.

sub nng-survey-duration

sub nng-survey-duration(
    Net::NNG::NNGSocket $socket,
    Int $duration
) returns Bool

Set survey duration on a socket. This function accepts a duration in milliseconds. Returns True on success and a Failure on error.

sub nng-surveyor0-open

sub nng-surveyor0-open() returns Net::NNG::NNGSocket

Create a new socket for handling survey (version 0) requests. Use nng-listen to attach this socket to a protocol and address.

sub nng-respondent0-open

sub nng-respondent0-open() returns Net::NNG::NNGSocket

Create a respondent (version 0) socket for replying to surveys. use nng-listen to attach this socket to a protocol and address.

sub nng-listen

sub nng-listen(
    Net::NNG::NNGSocket $socket,
    Str $url
) returns Bool

Start listening on a socket. Returns True on success or Failure on error. Valid URLs will vary depending on the features your libnng is compiled for. At the time of writing tcp, ipc, among others are supported by default. Additional dependencies are required for secure protocols such as https, wss. Additional dependencies are also required for XeroTier Networking. Check the nng docs for more details.

sub nng-dial

sub nng-dial(
    Net::NNG::NNGSocket $socket,
    Str $url
) returns Bool

Connects the given socket to a listening socket at the URL provided. Returns True on success and Failure on error. See nng-listen for a discussion of transports.

sub nng-recv

sub nng-recv(
    Net::NNG::NNGSocket:D $socket
) returns Blob

Receives messages on a socket. Returns a Blob of the message on success or a Failure on error.

sub nng-send

sub nng-send(
    Net::NNG::NNGSocket:D $socket,
    Blob $message
) returns Bool

Sends a Blob with the socket provided. Returns True on success or Failure on error.