czmq:查找“PUB / SUB + security”的代码示例

时间:2016-06-20 19:46:09

标签: ipc zeromq

我正在关注这篇文章:“http://hintjens.com/blog:49”。 “stonehouse”的测试代码使用“PUSH / PULL”,我尝试修改它以使用“PUB / SUB”。但我最初的天真尝试失败了(下面的代码,适用于PUSH / PULL)。有什么我想念的吗?顺便说一句,czmq真的可以用于PUB / SUB,因为即使我删除了与安全相关的行,它仍然无法正常工作。谢谢你的帮助。

#include <czmq.h>

int main (int argc, char **argv)
{
//  Create context and start authentication engine
zctx_t *ctx = zctx_new ();
zauth_t *auth = zauth_new (ctx);
zauth_set_verbose (auth, true);
zauth_allow (auth, "127.0.0.1");

zauth_configure_curve (auth, "*", CURVE_ALLOW_ANY);

if (argc == 1)
{   zcert_t *server_cert = zcert_new ();
    char *server_key = zcert_public_txt (server_cert);
    printf ("%d: BEGIN '%s' END\n", strlen (server_key), server_key);

    void *server = zsocket_new (ctx, ZMQ_PUB/*PUSH*/);
    zcert_apply (server_cert, server);
    zsocket_set_curve_server (server, 1);
    zsocket_bind (server, "tcp://*:9000");
    printf ("Hit any key to start sending...\n");
    getchar ();
    int i=5;
    while (i > 0)
    {   printf ("%d ", i); fflush (stdout);
        sleep (1);
        --i;
    }
    zstr_send (server, "Hello");
    printf ("sent\n");
    zcert_destroy (&server_cert);
}
else
{   zcert_t *client_cert = zcert_new ();

    void *client = zsocket_new (ctx, ZMQ_SUB/*PULL*/);
    zcert_apply (client_cert, client);
    zsocket_set_curve_serverkey (client, argv[1]);
    zsocket_connect (client, "tcp://127.0.0.1:9000");

    char *message = zstr_recv (client);
    printf ("received: %s\n", message);
    assert (streq (message, "Hello"));
    free (message);
    puts ("Stonehouse test OK");

    zcert_destroy (&client_cert);
}

zauth_destroy (&auth);
zctx_destroy (&ctx);
return 0;
}

1 个答案:

答案 0 :(得分:0)

我终于弄明白了:订阅者需要设置&#34; ZMQ_SUBSCRIBE&#34;的选项。否则,它什么也得不到。我以前假设相反,这是错误的。