aboutsummaryrefslogtreecommitdiff
path: root/docs/man/nng.7.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'docs/man/nng.7.adoc')
-rw-r--r--docs/man/nng.7.adoc156
1 files changed, 156 insertions, 0 deletions
diff --git a/docs/man/nng.7.adoc b/docs/man/nng.7.adoc
new file mode 100644
index 00000000..7b145a54
--- /dev/null
+++ b/docs/man/nng.7.adoc
@@ -0,0 +1,156 @@
+= nng(7)
+//
+// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2018 Capitar IT Group BV <info@capitar.com>
+//
+// This document is supplied under the terms of the MIT License, a
+// copy of which should be located in the distribution where this
+// file was obtained (LICENSE.txt). A copy of the license may also be
+// found online at https://opensource.org/licenses/MIT.
+//
+
+== NAME
+
+nng - nanomsg next generation
+
+== SYNOPSIS
+
+*cc* ['flags'] 'files' *-lnng* ['libraries']
+
+== DESCRIPTION
+
+The _nng_ library provides a common messaging framework intended to
+solve common communication problems in distributed applications.
+It offers a number of _protocols_, and also a number of _transports_.
+
+The _protocols_ implement the semantics associated with particular
+communications scenarios, such as RPC style services, service discovery,
+publish/subscribe, and so forth.
+
+The _transports_ provide support for underlying transport methods, such
+as TCP, IPC, websockets, and so forth.
+
+The _nng_ library is designed to permit easy creation of new _transports_ and,
+to a lesser extent, new _protocols_.
+
+The _nng_ library is wire compatible with the SP protocols described in
+the nanomsg project; projects using
+https://github.com/nanomsg/nanomsg[_libnanomsg_] can inter-operate with
+nng as well as other conforming implementations. (One such implementation
+is https://github.com/go-mangos/mangos[_mangos_].) Applications using _nng_
+which wish to communicate with older libraries must ensure that they only
+use protocols or transports offered by the earlier library.
+
+The _nng_ library also offers a compatible API, permitting legacy code to
+be recompiled or relinked against _nng_. When doing this, support for
+certain enhancements or features will likely be absent, requiring the
+application developer to use the new-style API.
+
+The _nng_ library is implemented in pure C; if you need bindings for
+other languages please check the http://nanomsg.org/[website].
+
+== Protocols
+
+* <<nng_bus.7#,nng_bus(7)>> - Bus protocol
+* <<nng_pair.7#,nng_pair(7)>> - Pair protocol
+* <<nng_pub.7#,nng_pub(7)>> - Publisher side of publish/subscribe protocol
+* <<nng_pull.7#,nng_pull(7)>> - Pull side of pipeline protocol
+* <<nng_push.7#,nng_push(7)>> - Push side of pipeline protocol
+* <<nng_sub.7#,nng_sub(7)>> - Subscriber side of publish/subscribe protocol
+* <<nng_rep.7#,nng_rep(7)>> - Reply side of request/reply protocol
+* <<nng_req.7#,nng_req(7)>> - Request side of request/reply protocol
+* <<nng_respondent.7#,nng_respondent(7)>> - Respondent side of survey protocol
+* <<nng_surveyor.7#,nng_surveyor(7)>> - Surveyor side of survey protocol
+
+== Transports
+
+* <<nng_inproc.7#,nng_inproc(7)>> - Intra-process transport
+* <<nng_ipc.7#,nng_ipc(7)>> - Inter-process transport
+* <<nng_tls.7#,nng_tls(7)>> - TLSv1.2 over TCP transport
+* <<nng_tcp.7#,nng_tcp(7)>> - TCP (and TCPv6) transport
+* <<nng_ws.7#,nng_ws(7)>> - WebSocket transport
+* <<nng_zerotier.7#,nng_zerotier(7)>> - ZeroTier transport
+
+== Conceptual Overview
+
+_nng_ presents a _socket_ view of networking. The sockets are constructed
+using protocol-specific functions, as a given socket implements precisely
+one _nng_ protocol.
+
+Each socket can be used to send and receive messages (if the protocol)
+supports it, and implements the appropriate protocol semantics. For
+example, <<nng_sub.7#,nng_sub(7)>> sockets automatically filter incoming
+messages to discard those for topics that have not been subscribed.
+
+_nng_ sockets are message oriented, so that messages are either delivered
+wholly, or not at all. Partial delivery is not possible. Furthermore,
+_nng_ does not provide any other delivery or ordering guarantees;
+messages may be dropped or reordered. (Some protocols, such as
+<<nng_req.7#,nng_req(7)>> may offer stronger guarantees by
+performing their own retry and validation schemes.)
+
+Each socket can have zero, one, or many "endpoints", which are either
+_listeners_ or _dialers_. (A given socket may freely choose whether it uses
+listeners, dialers, or both.) These "endpoints" provide access to
+underlying transports, such as TCP, etc.
+
+Each endpoint is associated with a URL, which is a service address. For
+dialers, this will be the service address that will be contacted, whereas
+for listeners this is where the listener will bind and watch for new
+connections.
+
+Endpoints do not themselves transport data. They are instead responsible
+for the creation of _pipes_, which can be thought of as message-oriented,
+connected, streams. Pipes frequently correspond to a single underlying
+byte stream -- for example both IPC and TCP transports implement their
+pipes using a 1:1 relationship with a connected socket.
+
+Endpoints create pipes as needed. Listeners will create them when a new
+client connection request arrives, and dialers will generally create one,
+then wait for it to disconnect before reconnecting.
+
+Most applications should not have to worry about endpoints or pipes at
+all; the socket abstraction should provide all the functionality needed
+other than in a few specific circumstances.
+
+=== URLs
+
+(((URL)))
+The _nng_ library uses ((universal resource locators)) (URLs)
+following the format specified in
+https://tools.ietf.org/html/rfc3986[RFC 3986],
+including some schemes that are unique
+to SP.
+(((URL, canonicalized)))
+The URLs used in _nng_ are canonicalized as follows, mostly in
+accordance with
+https://tools.ietf.org/html/rfc3986#section-6.2.2[RFC 3986 6.2.2]:
+
+ . The URL is parsed into scheme, userinfo, host, port, path, query and
+ fragment components. (Not all of these members are necessarily present.)
+ . The scheme, hostname, and port if present, are converted to lower case.
+ . Percent-encoded values for
+ https://tools.ietf.org/html/rfc3986#section-2.3[unreserved characters]
+ converted to their unencoded forms.
+ . Additionally URL percent-encoded values for characters in the path
+ and with numeric values larger than 127 (i.e. not ASCII) are decoded.
+ . The resulting path is checked for invalid UTF-8 sequences, consisting
+ of surrogate pairs, illegal byte sequences, or overlong encodings.
+ If this check fails, then the entire URL is considered invalid.
+ . Path segments consisting of `.` and `..` are resolved as per
+ https://tools.ietf.org/html/rfc3986#section-6.2.2.3[RFC 3986 6.2.2.3].
+ . Further, empty path segments are removed, meaning that duplicate
+ slash (`/`) separators are removed from the path.
+
+Note that steps 4, 5, and 7 are not specified by RFC 3986, but performing
+them is believed to improve both the usability and security of _nng_
+applications, without violating RFC 3986 itself.
+
+== API
+
+The library API is documented at <<libnng.3#,libnng(3)>>.
+
+== SEE ALSO
+
+<<libnng.3#,libnng(3)>>,
+<<nng_compat.3compat#,nng_compat(3compat)>>