使用czmq传递消息

时间:2014-10-16 05:35:07

标签: c zeromq

我正在尝试使用czmq,使用inproc协议进行第一次测试,如果同一程序中的“puller”和“pusher”。 但我想在不同的processus上使用它,我也尝试过ipc和tcp,而我无法实现与服务器和客户端的通信。

服务器:

#include <czmq.h>
int main (void)
{

    zctx_t *ctx = zctx_new ();


    void *reader = zsocket_new (ctx, ZMQ_PULL);

    int rc = zsocket_connect (reader, "tcp://localhost:5555");
    printf("wait for a message...\n");

    char *message = zstr_recv (reader);

    printf("Message: %s",message);

    zctx_destroy (&ctx);
    return 0;
}

和客户:

#include <czmq.h>
int main (void)
{

    zctx_t *ctx = zctx_new ();

    void *writer = zsocket_new (ctx, ZMQ_PUSH);

    int rc = zsocket_bind (writer, "tcp://*:5555");
    assert (rc == service);
    zstr_send (writer, "HELLO");

    zsocket_destroy (ctx, writer);

    return 0;

}

你能告诉我我的代码有什么问题吗?我还尝试了其他示例代码,但没有取得更多成功。

更新

服务器正在等待zstr_recv中的消息,但客户端发送的消息不会在服务器进程上触发任何内容。

1 个答案:

答案 0 :(得分:3)

发送消息后,客户端进程正在过快地销毁套接字。使用inproc,你可以侥幸逃脱它。因为inproc很快,而TCP必须在消息到达TCP堆栈之前经历更多障碍。

确实,zsocket_destroy()应该阻塞,直到消息被发送,如果ZMQ_LINGER = -1(默认带有原始ZMQ),但是CZMQ的默认逗留为0.这意味着当套接字丢弃传输中的消息被毁了。

尝试将linger(使用zctx_set_linger)设置为大于零的值;也许10毫秒,但使用对你有益的任何价值。