87 lines
2.5 KiB
Text
87 lines
2.5 KiB
Text
|
= nng_rep(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_rep - reply protocol
|
||
|
|
||
|
== SYNOPSIS
|
||
|
|
||
|
[source,c]
|
||
|
----
|
||
|
#include <nng/protocol/reqrep0/rep.h>
|
||
|
----
|
||
|
|
||
|
== DESCRIPTION
|
||
|
|
||
|
(((protocol, _rep_)))
|
||
|
The ((_rep_ protocol)) is one half of a ((request/reply pattern)).
|
||
|
In this pattern, a requester sends a message to one replier, who
|
||
|
is expected to reply.
|
||
|
The request is resent if no reply arrives,
|
||
|
until a reply is received or the request times out.
|
||
|
|
||
|
TIP: This protocol is useful in setting up RPC-like services.
|
||
|
It is also reliable, in that a requester will keep retrying until
|
||
|
a reply is received.
|
||
|
|
||
|
The _rep_ protocol is the replier side, and the
|
||
|
xref:nng_req.7.adoc[_req_] protocol is the requester side.
|
||
|
|
||
|
=== Socket Operations
|
||
|
|
||
|
The xref:nng_rep_open.3.adoc[`nng_rep0_open()`] functions create a replier socket.
|
||
|
This socket may be used to receive messages (requests), and then to send
|
||
|
replies.
|
||
|
|
||
|
Generally a reply can only be sent after receiving a request.
|
||
|
|
||
|
Send operations will result in `NNG_ESTATE` if no corresponding request
|
||
|
was previously received.
|
||
|
|
||
|
Likewise, only one receive operation may be pending at a time.
|
||
|
Any additional concurrent receive operations will result in `NNG_ESTATE`.
|
||
|
|
||
|
xref:nng.7.adoc#raw_mode[Raw] mode sockets ignore all these restrictions.
|
||
|
|
||
|
=== Context Operations
|
||
|
|
||
|
This protocol supports the creation of xref:nng_ctx.5.adoc[contexts] for concurrent
|
||
|
use cases using xref:nng_ctx_open.3.adoc[`nng_ctx_open()`].
|
||
|
|
||
|
Each context may have at most one outstanding request, and operates
|
||
|
independently of the others.
|
||
|
The restrictions for order of operations with sockets apply equally
|
||
|
well for contexts, except that each context will be treated as if it were
|
||
|
a separate socket.
|
||
|
|
||
|
=== 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 _rep_ protocol has no protocol-specific options.
|
||
|
|
||
|
==== Protocol Headers
|
||
|
|
||
|
(((backtrace)))
|
||
|
The _rep_ protocol uses a _backtrace_ in the header.
|
||
|
This is more fully documented in the xref:nng_req.7.adoc[_req_] manual.
|
||
|
|
||
|
== SEE ALSO
|
||
|
|
||
|
[.text-left]
|
||
|
xref:nng_rep_open.3.adoc[nng_rep_open(3)],
|
||
|
xref:nng.7.adoc[nng(7)],
|
||
|
xref:nng_req.7.adoc[nng_req(7)]
|