1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
<section id="nn-banner">
<h1 class="nn-banner-title">NNG: Lightweight Messaging Library</h1>
<p class="nn-banner-desc">A lightweight, broker-less library</p>
<a class="nn-btn-download" href="https://github.com/nanomsg/nng/releases">Download</a>
</section>
<div id="nn-content">
<section id="nn-partner">
<div class="container">
<div class="nn-partner-container">
<div class="nn-partner-title">
Used By
</div>
<div class="nn-partner-items">
<div class="nn-partner-item">
<a href="https://www.racktopsystems.com" target="_blank">
<img src="/assets/image/partner-racktop.png">
</a>
</div>
<div class="nn-partner-item">
<a href="https://devolutions.net" target="_blank">
<img src="/assets/image/partner-devolutions.png">
</a>
</div>
<div class="nn-partner-item">
<img src="/assets/image/partner-nio.png">
</div>
<div class="nn-partner-item">
<img src="/assets/image/partner-cern.png">
</div>
<div class="nn-partner-item">
<a href="https://nanomq.io" target="_blank">
<img src="/assets/image/partner-nanomq.png">
</a>
</div>
<div class="nn-partner-item">
<a href="https://motorcortex.io" target="_blank">
<img src="/assets/image/partner-motorcortex.png">
</a>
</div>
<div class="nn-partner-item">
<a href="https://www.capitar.com" target="_blank">
<img src="/assets/image/partner-capitap.png">
</a>
</div>
</div>
</div>
</div>
</section>
<section id="nn-intro">
<div class="container">
<div class="nn-intro-container">
<div class="nn-intro-cov"
style="z-index: 10; width: 10px; height: 35%; top: 0; left: 0; transform: translateX(-8px);">
</div>
<div class="nn-intro-cov"
style="z-index: 10; width: 30%; height: 10px; top: 0; left: 0; transform: translate(-8px ,-8px);">
</div>
<h2 class="nn-intro-title nn-subtitle">Introduction</h2>
<p class="nn-intro-desc">NNG, like its predecessors <a class="is-brown"
href="https://github.com/nanomsg/nanomsg">nanomsg</a>
(and
to some extent <a class="is-brown" href="https://zeromq.org">ZeroMQ</a>),
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.</p>
</div>
</div>
</section>
<section id="nn-feat">
<div class="container">
<h2 class="nn-subtitle has-text-centered nn-feat-title">
Features
</h2>
<div class="columns is-multiline">
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-reliability.png" class="mb-4" />
<h3 class="card-title mb-2">Reliability</h3>
<p class="card-desc">NNG is designed for production use from the beginning. Every error case is considered,
and it is designed to avoid crashing except in cases of gross developer error. (Hopefully we don’t have
any of these in our own code.)</p>
</div>
</div>
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-scalability.png" class="mb-4" />
<h3 class="card-title mb-2">Scalability</h3>
<p class="card-desc">NNG scales out to engage multiple cores using a bespoke asynchronous I/O framework,
using thread pools to spread load without exceeding typical system limits.</p>
</div>
</div>
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-maintainability.png" class="mb-4" />
<h3 class="card-title mb-2">Maintainability</h3>
<p class="card-desc">NNG’s architecture is designed to be modular and easily grasped by developers
unfamiliar with the code base. The code is also well documented.</p>
</div>
</div>
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-extensibility.png" class="mb-4" />
<h3 class="card-title mb-2">Extensibility</h3>
<p class="card-desc">Because it avoids ties to file descriptors, and avoids confusing interlocking state
machines, it is easier to add new protocols and transports to NNG. This was demonstrated by the addition
of the TLS and ZeroTier transports.</p>
</div>
</div>
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-security.png" class="mb-4" />
<h3 class="card-title mb-2">Security</h3>
<p class="card-desc">NNG provides TLS 1.2 and ZeroTier transports, offering support for robust and industry
standard authentication and encryption. In addition, it is hardened to be resilient against malicious
attackers, with special consideration given to use in a hostile Internet.</p>
</div>
</div>
<div class="column is-6">
<div class="card feat-card">
<img src="/assets/image/feat-usability.png" class="mb-4" />
<h3 class="card-title mb-2">Usability</h3>
<p class="card-desc">NNG eschews slavish adherence parts of the more complex and less well understood POSIX
APIs, while adopting the semantics that are familiar and useful. New APIs are intuitive, and the optional
support for separating protocol context and state from sockets makes creating concurrent applications
vastly simpler than previously possible.</p>
</div>
</div>
</div>
</div>
</section>
<section id="nn-detail">
<div class="container compatibility">
<div class="columns">
<div class="column is-7">
<h2 class="nn-subtitle has-text-left nn-detail-title">Compatibility</h2>
<p class="nn-detail-desc">This project offers both wire compatibility and API compatibility, so most nanomsg
users can begin using
NNG right away.</p>
<p class="nn-detail-desc">
Existing nanomsg and mangos applications can inter-operate with NNG applications automatically.</p>
</div>
<div class="column is-4 is-offset-1">
<img src="/assets/image/compatibility.png">
</div>
</div>
</div>
<div class="container platforms">
<div class="columns">
<div class="column is-7 is-order-2 is-offset-1">
<h2 class="nn-subtitle has-text-right nn-detail-title">Supported Platforms</h2>
<p class="nn-detail-desc has-text-right">NNG supports Linux, macOS, Windows (Vista or better), illumos,
Solaris, FreeBSD,
Android, and iOS. Most other POSIX platforms should work out of the box but have not been tested. Very old
versions of otherwise supported platforms might not work.</p>
</div>
<div class="column is-4">
<img src="/assets/image/platforms.png">
</div>
</div>
</div>
</section>
<section id="nn-quick-start">
<div class="container">
<h2 class="nn-subtitle has-text-centered nn-quick-start-title has-text-white">
Quick Start
</h2>
<div class="columns is-8-desktop is-variable">
<div class="column is-6">
<p class="nn-quick-start-desc mb-3">
To build this project, you will need a C99 compatible compiler and <a class="is-brown"
href="http://www.cmake.org/">CMake</a> version 3.13 or
newer.
</p>
<p class="nn-quick-start-desc mb-3">We recommend using the <a class="is-brown"
href="https://ninja-build.org/">Ninja</a> build system (pass "-G Ninja"
to CMake) when
you
can. (And not just because
Ninja sounds like "NNG" — it’s also blindingly fast and has made our lives as developers measurably better.)
</p>
<p class="nn-quick-start-desc mb-3">If you want to build with <a class="is-brown"
href="https://tls.mbed.org/">TLS</a> support you will also need
mbedTLS. See
<a class="is-brown"
href="https://github.com/nanomsg/nng/blob/stable/docs/BUILD_TLS.md">docs/BUILD_TLS.md</a> for details.
</p>
</div>
<div class="column is-6">
<p class="mb-4 has-text-white has-text-weight-medium">With a Linux or UNIX environment:</p>
<pre class="nn-quick-start-pre">$ mkdir build
$ cd build
$ cmake -G Ninja ..
$ ninja
$ ninja test
$ ninja install</pre>
</div>
</div>
</div>
</section>
<section id="nn-sponsors">
<div class="container">
<h2 class="nn-subtitle has-text-centered nn-quick-start-title nn-sponsors-title">Sponsors</h2>
<div class="nn-sponsors-container">
<a class="nn-sponsors-card" href="https://www.emqx.com/" target="_blank">
<img src="/assets/image/sponsors-emq.png" />
</a>
<a class="nn-sponsors-card" href="https://staysail.tech" target="_blank">
<img src="/assets/image/sponsors-staysail.png" />
</a>
<a class="nn-sponsors-card" href="https://vectioneer.com" target="_blank">
<img src="/assets/image/sponsors-vectioneer.png" />
</a>
<a class="nn-sponsors-card" href="https://www.capitar.com" target="_blank">
<img src="/assets/image/sponsors-capitap.png" />
</a>
</div>
</div>
</section>
</div>
|