Messages

Messages in Scalability Protocols are the fundamental unit of transmission and reception, as these protocols are fundamentally message-oriented.

Message object

An nng_msg represents a single message sent between Scalability Protocols peers.

Messages have a body, containing the application supplied payload, and a header, containing protocol specific routing and similar related information.

tip

Only applications using raw mode need to access the message header.

Creating, Destroying and Using

Messages are allocated using nng_msg_alloc(), and are deallocated using nng_msg_free().

In addition there are other functions used to access message contents, including adding data to either the beginning or end of the message, automatic data conversion, and removing data from the beginning or end.

Performance Considerations

While there are convenience wrappers for sending and receiving arrays of bytes, using message objects directly when possible will give better performance by reducing data copies and needless allocations.

These functions are designed to try to avoid copying message contents by making use of scratch areas at the beginning and end of the message. These scratch areas, the “headroom” and “tailroom”, are automatically included when allocating a message.

Direct Use Forbidden

The nng_msg structure is opaque, and applications should never try to rely on the size of it, nor access internal members directly. This insulates the application from changes in subsequent NNG versions that would affect the binary representation of the nng_msg itself.

Examples

Example 1: Preparing a message for use

    #include <nng/nng.h>

    nng_msg *m;
    if (nng_msg_alloc(&m, strlen("content") + 1) != 0) {
       // handle error
    }
    strcpy(nng_msg_body(m), "content");

Example 2: Preallocating message content

    if (nng_msg_alloc(&m, 1024) != 0) {
        // handle error
    }
    while ((val64 = next_datum()) != 0) P
        if (nng_msg_append_u64(m, val64) != 0) {
            // handle error
        }
    }

See Also

nng_aio_get_msg, nng_aio_set_msg, nng_msg_alloc, nng_msg_append, nng_msg_body, nng_msg_capacity, nng_msg_dup, nng_msg_free, nng_msg_header, nng_msg_header_append, nng_msg_header_chop, nng_msg_header_clear, nng_msg_header_insert, nng_msg_header_len, nng_msg_header_trim, nng_msg_insert, nng_msg_len, nng_msg_reserve, nng_msg_realloc, nng_msg_set_pipe, nng_msg_trim, nng_recvmsg, nng_sendmsg