我一直在为 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));
(...)
Run Code Online (Sandbox Code Playgroud)
但是,查看发布者的代码示例(在 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);
(...)
Run Code Online (Sandbox Code Playgroud)
消息只是简单发送,没有指定主题。这怎么可能?
在 python 版本中,我在发布者代码中看到:
socket.send_string("%d %d" % (topic, number))
Run Code Online (Sandbox Code Playgroud)
但我在 C 中没有见过这样的东西。
欢迎来到 ZeroMQ Zen-of Zero。
消息的所有字节都被视为主题,并且订户端指定的“主题过滤”对订阅的主题集与消息的左侧 n 字节进行简单且简单的字节匹配进行操作。
与任何记录的主题匹配的那些消息被视为要传递的消息,与任何一个不匹配的消息都不会被视为要传递的消息(除非设置了反向匹配选项)
| 归档时间: |
|
| 查看次数: |
4021 次 |
| 最近记录: |