[−][src]Crate nng
A safe Rust wrapper for NNG
What Is NNG
From the NNG Github Repository:
NNG, like its predecessors nanomsg (and to some extent ZeroMQ), is a lightweight, broker-less library, offering a simple API to solve common recurring messaging problems, such as publish/subscribe, RPC-style request/reply, or service discovery. The API frees the programmer from worrying about details like connection management, retries, and other common considerations, so that they can focus on the application instead of the plumbing.
Nng-rs
This crate provides a safe wrapper around the NNG library, seeking to maintain an API that is similar to the original library. As such, the majority of examples available online should be easy to apply to this crate.
Examples
The following example uses the intra-process transport to set up a request/reply socket pair. The "client" sends a String to the "server" which responds with a nice phrase.
use std::io::Write; use nng::*; const ADDRESS: &'static str = "inproc://nng/example"; fn request() -> Result<()> { // Set up the client and connect to the specified address let mut client = Socket::new(Protocol::Req0)?; client.dial(ADDRESS)?; // Send the request from the client to the server. In general, it will be // better to directly use a `Message` to enable zero-copy, but that doesn't // matter here. client.send("Ferris".as_bytes())?; // Wait for the response from the server. let msg = client.recv()?; let reply = String::from_utf8_lossy(&msg); assert_eq!(reply, "Hello, Ferris!"); Ok(()) } fn reply() -> Result<()> { // Set up the server and listen for connections on the specified address. let server = Socket::new(Protocol::Rep0)?; server.listen(ADDRESS)?; // Receive the message from the client. let mut msg = server.recv()?; let name = String::from_utf8_lossy(&msg).into_owned(); assert_eq!(name, "Ferris"); // Reuse the message to be more efficient. msg.clear(); write!(msg, "Hello, {}!", name).unwrap(); server.send(msg)?; Ok(()) }
Additional examples are in the examples
directory.
Modules
options | Options available to configure |
Structs
Aio | An asynchronous I/O context. |
Context | A socket context. |
Dialer | A constructed and running dialer. |
DialerOptions | Configuration utility for nanomsg-next-generation dialers. |
Header | The header of a |
Listener | A constructed and running listener. |
ListenerOptions | Configuration utility for nanomsg-next-generation listeners. |
Message | An |
Pipe | A nanomsg-next-generation pipe. |
Socket | A nanomsg-next-generation socket. |
Enums
AioResult | The result of an AIO operation. |
Error | Errors potentially returned by NNG operations. |
PipeEvent | An event that happens on a Pipe instance. |
Protocol | Describes a relationship between a socket and all sockets to which it is connected. |
SocketAddr | Represents the addresses used by the underlying transports. |
Type Definitions
Result | Specialized |