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
|
---
version: tip
layout: manpage_v2
title: nng_bus(7)
---
<h1>nng_bus(7)</h1>
<div class="sect1">
<h2 id="_name">NAME</h2>
<div class="sectionbody">
<div class="paragraph">
<p>nng_bus - bus protocol</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="listingblock">
<div class="content">
<pre class="pygments highlight"><code data-lang="c"><span></span><span class="tok-cp">#include</span><span class="tok-w"> </span><span class="tok-cpf"><nng/protocol/bus0/bus.h></span></code></pre>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph">
<p>
The <em>bus</em> protocol provides for building mesh networks where
every peer is connected to every other peer.
In this protocol, each message sent by a node is sent to every one of
its directly connected peers.</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
Messages are only sent to directly connected peers.
This means that in the event that a peer is connected indirectly, it will not
receive messages.
When using this protocol to build mesh networks, it
is therefore important that a <em>fully-connected</em> mesh network be constructed.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>All message delivery in this pattern is best-effort, which means that
peers may not receive messages.
Furthermore, delivery may occur to some,
all, or none of the directly connected peers.
(Messages are not delivered when peer nodes are unable to receive.)
Hence, send operations will never block; instead if the
message cannot be delivered for any reason it is discarded.</p>
</div>
<div class="admonitionblock tip">
<table>
<tr>
<td class="icon">
<i class="fa icon-tip" title="Tip"></i>
</td>
<td class="content">
In order to minimize the likelihood of message loss, this protocol
should not be used for high throughput communications.
Furthermore, the more traffic <em>in aggregate</em> that occurs across the topology,
the more likely that message loss is to occur.
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="_socket_operations">Socket Operations</h3>
<div class="paragraph">
<p>The <a href="nng_bus_open.3.html"><code>nng_bus0_open()</code></a> functions create a bus socket.
This socket may be used to send and receive messages.
Sending messages will attempt to deliver to each directly connected peer.</p>
</div>
</div>
<div class="sect2">
<h3 id="_protocol_versions">Protocol Versions</h3>
<div class="paragraph">
<p>Only version 0 of this protocol is supported.
(At the time of writing, no other versions of this protocol have been defined.)</p>
</div>
</div>
<div class="sect2">
<h3 id="_protocol_options">Protocol Options</h3>
<div class="paragraph">
<p>The <em>bus</em> protocol has no protocol-specific options.</p>
</div>
</div>
<div class="sect2">
<h3 id="_protocol_headers">Protocol Headers</h3>
<div class="paragraph">
<p>When using a <em>bus</em> socket in <a href="nng.7.html#raw_mode">raw mode</a>, received messages will
contain the incoming <a href="nng_pipe.5.html">pipe</a> ID as the sole element in the header.
If a message containing such a header is sent using a raw <em>bus</em> socket, then,
the message will be delivered to all connected pipes <em>except</em> the one
identified in the header.
This behavior is intended for use with <a href="nng_device.3.html">device</a>
configurations consisting of just a single socket.
Such configurations are useful in the creation of rebroadcasters, and this
capability prevents a message from being routed back to its source.
If no header is present, then a message is sent to all connected pipes.</p>
</div>
<div class="paragraph">
<p>When using normal (cooked mode) <em>bus</em> sockets, no message headers are present.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_see_also">SEE ALSO</h2>
<div class="sectionbody">
<div class="paragraph text-left">
<p><a href="nng_bus_open.3.html">nng_bus_open(3)</a>,
<a href="nng.7.html">nng(7)</a></p>
</div>
</div>
</div>
|