aboutsummaryrefslogtreecommitdiff
path: root/docs/ref/proto/sub.md
blob: 5234b6fbe2531bb6b69ac64efd8477823c63208e (plain)
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
# SUB protocol

The {{i:*SUB* protocol}}{{hi:*SUB*}} is one half of a publisher/{{i:subscriber}} pattern.
In this pattern, a publisher sends data, which is broadcast to all subscribers.
The subscribing applications only see the data to which they have subscribed.

The _SUB_ protocol is the subscriber side, and the
[_PUB_][pub] protocol is the publisher side.

> [!NOTE]
> The publisher delivers all messages to all subscribers.
> The subscribers maintain their own subscriptions, and filter them locally.
> Thus, this pattern should not be used in an attempt to
> reduce bandwidth consumption.

The topics that subscribers subscribe to is compared to the leading bytes of
the message body.
Applications should construct their messages accordingly.

### Socket Operations

The [`nng_sub0_open`] functions create a _SUB_ socket.
This socket may be used to receive messages, but is unable to send them.
Attempts to send messages will result in [`NNG_ENOTSUP`].

### Protocol Versions

Only version 0 of this protocol is supported.
(At the time of writing, no other versions of this protocol have been defined.)

### Protocol Options

The following protocol-specific option is available.

- {{i:`NNG_OPT_SUB_PREFNEW`}}: \
  (`bool`) \
  \
  This read/write option specifies the behavior of the subscriber when the queue is full.
  When `true` (the default), the subscriber will make room in the queue by removing the oldest message.
  When `false`, the subscriber will reject messages if the message queue does not have room.

### Protocol Headers

The _SUB_ protocol has no protocol-specific headers.

{{#include ../xref.md}}