【发布时间】:2019-09-08 00:44:13
【问题描述】:
我一直在为一个发布者和多个订阅者的 PUB-SUB ZeroMQ 系统(用 C 语言)编写代码。 在客户端代码上,我必须根据过滤器订阅一个主题,如下所示:
(...)
void *context = zmq_ctx_new ();
void *subscriber = zmq_socket (context, ZMQ_SUB);
int rc = zmq_connect (subscriber, "tcp://localhost:5555");
char *filter = (argc > 1)? argv [1]: "10001 "; // example of a filter
rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen (filter));
(...)
但是,查看发布者的代码示例(参见 ZeroMQ 的文档),我没有看到创建主题的任何行:
(...)
void *context = zmq_ctx_new ();
void *publisher = zmq_socket (context, ZMQ_PUB);
int rc = zmq_bind (publisher, "tcp://*:5556");
while (1) {
(...)
char update [20];
sprintf (update, "%05d %d %d", zipcode, temperature, relhumidity);
s_send (publisher, update);
(...)
消息只是发送,没有指定主题。这怎么可能?
在 python 版本中,我在发布者代码中看到:
socket.send_string("%d %d" % (topic, number))
但我在 C 中没有见过这样的东西。
【问题讨论】:
-
没有什么能强迫你发出一个主题。抱歉,ZeroMQ 在这方面是非常宽容的,尽管那时事情可能不会按预期工作。您能否提供您需要解释的代码minimal reproducible example?有太多代码遗漏了,人们不应该为了知道你做了什么而猜测。
-
@UlrichEckhardt 不是真的......他显然在问“你如何在 zmq 中订阅一个主题”,并列出了所有需要这样做的代码。事实上,他的代码有效,只是他不明白为什么,这很容易回答。