#| include: false knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
R binding for NNG (Nanomsg Next Gen), a successor to ZeroMQ. NNG is a socket library for reliable, high-performance messaging over in-process, IPC, TCP, WebSocket and secure TLS transports. Implements 'Scalability Protocols', a standard for common communications patterns including publish/subscribe, request/reply and service discovery.
As its own threaded concurrency framework, provides a toolkit for asynchronous programming and distributed computing. Intuitive 'aio' objects resolve automatically when asynchronous operations complete, and synchronisation primitives allow R to wait upon events signalled by concurrent threads.
Designed for performance and reliability, nanonext
is a lightweight wrapper around the NNG C library, and is itself implemented almost entirely in C.
Provides the interface for code and processes to communicate with each other - receive data generated in Python, perform analysis in R, and send results to a C++ program – on the same computer or across networks spanning the globe.
Implemented scalability protocols:
Supported transports:
Development of the TLS implementation was generously supported by the
.
Web utilities:
ip_addr()
- for retrieving all local network IP addresses by interfacemessenger()
- console-based instant messaging with authenticationnanonext
offers 2 equivalent interfaces: a functional interface, and an object-oriented interface.
The primary object in the functional interface is the Socket. Use socket()
to create a socket and dial or listen at an address. The socket is then passed as the first argument of subsequent actions such as send()
or recv()
.
Example using Request/Reply (REQ/REP) protocol with inproc transport:
(The inproc transport uses zero-copy where possible for a much faster solution than alternatives)
Create sockets:
#| label: example2 library(nanonext) socket1 <- socket("req", listen = "inproc://nanonext") socket2 <- socket("rep", dial = "inproc://nanonext")
Send message from 'socket1':
#| label: send2 send(socket1, "hello world!")
Receive message using 'socket2':
#| label: recv2 recv(socket2)
The primary object in the object-oriented interface is the nano object. Use nano()
to create a nano object which encapsulates a Socket and Dialer/Listener. Methods such as $send()
or $recv()
can then be accessed directly from the object.
Example using Pipeline (Push/Pull) protocol with TCP/IP transport:
Create nano objects:
#| label: example library(nanonext) nano1 <- nano("push", listen = "tcp://127.0.0.1:5555") nano2 <- nano("pull", dial = "tcp://127.0.0.1:5555")
Send message from 'nano1':
#| label: send nano1$send("hello world!")
Receive message using 'nano2':
#| label: recv nano2$recv()
Please refer to the nanonext vignette for full package functionality.
This may be accessed within R by:
#| label: vignette #| eval: false vignette("nanonext", package = "nanonext")
Install the latest release from CRAN:
#| label: cran #| eval: false install.packages("nanonext")
Or the current development version from R-universe:
#| label: universe #| eval: false install.packages("nanonext", repos = "https://r-lib.r-universe.dev")
Installation from source requires 'libnng' >= v1.9.0 and 'libmbedtls' >= 2.5.0 (suitable installations are automatically detected), or else 'cmake' to compile 'libnng' v1.11.0 and 'libmbedtls' v3.6.2 included within the package sources.
It is recommended for optimal performance and stability to let the package automatically compile bundled versions of 'libmbedtls' and 'libnng' during installation. To ensure the libraries are compiled from source even if system installations are present, set the NANONEXT_LIBS
environment variable prior to installation e.g. by Sys.setenv(NANONEXT_LIBS = 1)
.
As system libraries, 'libnng' is available as libnng-dev (deb) or nng-devel (rpm), and 'libmbedtls' as libmbedtls-dev (deb) or libmbedtls-devel (rpm). The INCLUDE_DIR
and LIB_DIR
environment variables may be set prior to package installation to specify a custom location for 'libmbedtls' or 'libnng' other than the standard filesystem locations.
Additional requirements for Solaris: (i) the 'xz' package - available on OpenCSW, and (ii) a more recent version of 'cmake' than available on OpenCSW - refer to the 'cmake' website for the latest source file.
On Windows, 'libnng' v1.11.0 and 'libmbedtls' v3.6.2 will be compiled from the package sources during installation and hence requires the 'Rtools' toolchain.
For R >= 4.2 using the 'Rtools42' or newer toolchains, the prerequisite 'cmake' is included. For previous R versions using 'Rtools40' or earlier, it may be necessary to separately install a version of 'cmake' in Windows and ensure that it is added to your system's PATH
.
We would like to acknowledge in particular:
nanonext
.nanonext
with later
to support the next generation of completely event-driven 'promises'.Links:
◈ nanonext R package: https://nanonext.r-lib.org/
nanonext is listed in CRAN Task Views:
NNG: https://nng.nanomsg.org/
Mbed TLS: https://www.trustedfirmware.org/projects/mbed-tls/
--
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.