我正在关注这篇文章:“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;
}
答案 0 :(得分:0)
我终于弄明白了:订阅者需要设置&#34; ZMQ_SUBSCRIBE&#34;的选项。否则,它什么也得不到。我以前假设相反,这是错误的。