文档

  语言:   库:

消息

ZeroMQ 消息是在应用程序之间或同一应用程序组件之间传递的离散数据单元。从 ZeroMQ 本身的角度来看,消息被视为不透明的二进制数据。

在线路上传输时,ZeroMQ 消息是大小从零开始、适合内存的任意二进制块。你可以使用 protocol buffers、msgpack、JSON 或应用程序需要通信的任何其他方式进行自己的序列化。选择一种可移植的数据表示形式是明智的,但你可以自行决定权衡。

最简单的 ZeroMQ 消息由一个帧(也称为消息部分)组成。帧是 ZeroMQ 消息的基本线路格式。帧是一个长度指定的数据块。长度可以从零开始。ZeroMQ 保证要么传递消息的所有部分(一个或多个),要么都不传递。这允许你将帧列表作为单个在线路上传输的消息发送或接收。

消息(单部分或多部分)必须适合内存。如果你想发送任意大小的文件,应该将其分成多块,并将每块作为单独的单部分消息发送。使用多部分数据不会减少内存消耗。

使用字符串

将数据作为字符串传递通常是启动通信的最简单方式,因为序列化相当直接。对于 ZeroMQ,我们规定了规则:字符串是长度指定的,并且在线路上传输时不带末尾的 null 字符

以下函数将一个字符串发送到 socket,其中字符串的长度等于帧的长度。

static void
s_send_string (void *socket, const char *string) {
	zmq_send (socket, strdup(string), strlen(string), 0);
}

要从 socket 读取字符串,我们需要提供一个缓冲区及其长度。zmq_recv 方法会尽可能多地向缓冲区写入数据。如果数据超出缓冲区大小,多余的数据将被丢弃。我们使用返回的帧大小设置适当的 null 终止符,并返回检索到的字符串的副本。

//  Receive string from socket and convert into C string
//  Chops string at 255 chars, if it's longer
static char *
s_recv_string (void *socket) {
    char buffer [256];
    int size = zmq_recv (socket, buffer, 255, 0);
    if (size == -1)
        return NULL;
    if (size > 255)
        size = 255;
    buffer [size] = \0;
    /* use strndup(buffer, sizeof(buffer)-1) in *nix */
    return strdup (buffer);
}

以下函数将 C 字符串作为单帧消息发送到 socket,其中字符串的长度等于帧的长度。

zstr_send (socket, "HELLO");

另一种选择是发送格式化字符串,类似于 printf。

zstr_sendf (socket, "%s-%d", "HELLO", 1);

要从 socket 读取字符串,只需调用 zstr_recv 函数。

char *string = zstr_recv (socket);
示例 messages_strings_send_recvzmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/zmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvcppzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/cppzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvazmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/azmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvczmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/czmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvfbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/fbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md

以下函数将一个字符串发送到 socket。

socket.SendFrame("Hello");

要从 socket 读取字符串,只需调用 ReceiveFrameString 函数。

string str = socket.ReceiveFrameString();
示例 messages_strings_send_recvclrzmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/csharp/clrzmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvdartzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/dart/dartzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvChumak 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/chumak
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvezmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/ezmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recverlang-czmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/erlang-czmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvFsNetMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fsnetmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvfszmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fszmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvzmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/zmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvgoczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/goczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvzeromq4-haskell 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/haskell/zeromq4-haskell
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md

以下函数将一个字符串作为单帧消息发送到 socket,其中字符串的长度等于帧的长度。

socket.send("HELLO");

要从 socket 读取字符串,只需调用 recv 函数。

String hello = socket.recvStr()

如果你需要对帧本身有更多控制,可以使用 ZFrame 类。以下代码片段展示了如何从字符串创建帧并发送帧。

ZFrame stringFrame = new ZFrame("HELLO");
stringFrame.send(socket, 0);

要从 socket 读取帧并返回 ZFrame 对象,调用 ZFrame 类的静态 recvFrame 函数。如果内容是字符串,你可以使用 getString 方法并提供用于序列化的字符集来检索它。默认情况下,ZMQ.CHARSET 用于所有序列化和反序列化字符串的操作。

ZFrame stringFrame = ZFrame.recvFrame(socket);
String hello = stringFrame.getString(ZMQ.CHARSET);
示例 messages_strings_send_recvJZMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvjczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvzeromqjs 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/nodejs/zeromqjs
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvperlzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/perl/perlzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvPyzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/python/pyzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvrbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/ruby/rbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvrust-zmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/rust/rust-zmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md
示例 messages_strings_send_recvzzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/zig/zzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv.md
    $example_dir/messages_strings_send_recv.md

由于我们利用帧的长度来反映字符串的长度,我们可以将每个字符串放入单独的帧中来发送多个字符串。

以下函数将字符串数组发送到 socket。ZMQ_SNDMORE 标志告诉 ZeroMQ 推迟发送,直到所有帧都准备好。

static void
s_send_strings (void *socket, const char[] *strings, int no_of_strings) {
    for (index = 0; index < no_of_strings; index++) {
        int FLAG = (index + 1) == no_of_strings ? 0 : ZMQ_SNDMORE;
        zmq_send (socket, strdup(strings[index]), strlen(strings[index]), FLAG);
    }
}

要从多部分消息中检索字符串帧,在调用 zmq_recv() 后,必须使用 ZMQ_RCVMORE zmq_getsockopt() 选项来确定是否还有更多部分要接收。

char *strings[25];
int rcvmore;
size_t option_len = sizeof (int);
int index = 0;
do {
    strings[index++] = s_recv_string (socket);
    zmq_getsockopt (socket, ZMQ_RCVMORE, &rcvmore, &option_len);
} while (rcvmore);

使用 zstr_sendm 函数可以发送多个字符串帧。此函数会推迟消息的实际发送,直到最后一个帧准备就绪。

zstr_sendm (socket, "HELLO");
zstr_sendm (socket, "beautiful");
zstr_send (socket, "WORLD!");

或者使用 zstr_sendx 函数甚至更简单。最后一个参数必须是 NULL!

zstr_sendx (socket, "HELLO", "beautiful", "WORLD!", NULL);

如果你喜欢使用消息对象而不是通过发送多个帧来构建消息,可以使用 zmsg 类。

zmsg_t *strings = zmsg_new ();
zmsg_addstr ("HELLO");
zmsg_addstr ("beautiful");
zmsg_addstr ("WORLD");
zmsg_send (&strings, socket);

要接收一系列字符串帧,使用 zstr_recvx 函数。每个字符串都会被分配并填充字符串数据!

char *hello, beautiful, world;
zstr_recvx (socket, &hello, &beautiful, &world, NULL);

或者在使用 zmsg 的情况下

zmsg_t *strings = zmsg_recv (socket);
char *hello = zmsg_popstr (strings);
char *beautiful = zmsg_popstr (strings);
char *world = zmsg_popstr (strings);
示例 messages_strings_send_recv_multizmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/zmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multicppzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/cppzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiazmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/azmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiczmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/czmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multifbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/fbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md

使用 SendMoreFrame 函数可以发送多个字符串帧。此函数会推迟消息的实际发送,直到最后一个帧准备就绪。

socket.SendMoreFrame("HELLO")
    .SendMoreFrame("beautiful")
    .SendMore("WORLD!");

要接收一系列字符串,调用 ReceiveMultipartStrings 函数。它将返回一个字符串列表。

List<string> strings = socket.ReceiveMultipartStrings();
示例 messages_strings_send_recv_multiclrzmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/csharp/clrzmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multidartzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/dart/dartzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiChumak 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/chumak
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiezmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/ezmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multierlang-czmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/erlang-czmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiFsNetMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fsnetmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multifszmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fszmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multizmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/zmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multigoczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/goczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multizeromq4-haskell 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/haskell/zeromq4-haskell
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md

使用 sendMore 方法可以在一条消息中发送多个字符串帧。此方法会推迟消息的实际发送,直到最后一个帧发送完毕。

socket.sendMore (socket, "HELLO");
socket.sendMore (socket, "beautiful");
socket.send (socket, "WORLD!");

你可以使用 ZMsg 类来构建多帧消息,而不是使用 socket 的发送 API。

ZMsg *strings = new ZMsg();
strings.add("HELLO");
strings.add("beautiful");
strings.add("WORLD");
strings.send(socket);

要接收一系列字符串帧,多次调用 recvStr 函数。

String hello     = socket.recvStr();
String beautiful = socket.recvStr();
String world 	 = socket.recvStr();

要一次调用检索整个消息,使用 ZMsg 类的静态 recvMsg 方法。

ZMsg strings = ZMsg.recvMsg(socket);
String hello     = strings.popString();
String beautiful = strings.popString();
String world     = strings.popString();
示例 messages_strings_send_recv_multiJZMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multijczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multizeromqjs 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/nodejs/zeromqjs
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiperlzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/perl/perlzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multiPyzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/python/pyzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multirbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/ruby/rbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multirust-zmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/rust/rust-zmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md
示例 messages_strings_send_recv_multizzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/zig/zzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_strings_send_recv_multi.md
    $example_dir/messages_strings_send_recv_multi.md

更多

了解更多关于使用消息的信息

  • 使用多部分消息: zmsg
  • 使用单个消息帧: zframe,
  • 使用字符串: zstr
示例 messages_functionszmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/zmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionscppzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/cppzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsazmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/azmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsczmqpp 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/czmqpp
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsfbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/cpp/fbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsclrzmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/csharp/clrzmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsdartzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/dart/dartzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsChumak 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/chumak
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsezmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/ezmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionserlang-czmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/erlang/erlang-czmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsFsNetMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fsnetmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsfszmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/fsharp/fszmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionszmq4 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/zmq4
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsgoczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/go/goczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionszeromq4-haskell 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/haskell/zeromq4-haskell
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsJZMQ 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsjczmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/java/jczmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionszeromqjs 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/nodejs/zeromqjs
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsperlzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/perl/perlzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsPyzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/python/pyzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsrbzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/ruby/rbzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionsrust-zmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/rust/rust-zmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md
示例 messages_functionszzmq 中缺失。您想贡献吗?请按照以下步骤操作

    git clone https://github.com/zeromq/zeromq.org
    example_dir=content/docs/examples/zig/zzmq
    cd zeromq.org && mkdir -p $example_dir
    [ -s $example_dir/index.md ] || cat >$example_dir/index.md <<'EOF'
---
headless: true
---
EOF
    cp archetypes/examples/messages_functions.md
    $example_dir/messages_functions.md