【发布时间】:2019-07-16 13:01:39
【问题描述】:
我目前正在 CZMQ(ZeroMQ 的高级 C 绑定)中设计消息代理。我的代理设计有点像典型的星型拓扑,但有额外的REP-sockets 来与发布者和订阅者通信。我还有一个PUB-socket 来通知发布者订阅者。
当一个节点连接到代理时,它必须通过这个REP-socket 进行握手,然后该节点被添加到服务器的内部列表中。我的节点结构如下所示:
struct node {
int type;
char *uuid;
char *path;
size_t path_len;
int64_t timestamp;
};
path 变量是发布者/订阅者正在使用的订阅路径,例如/path/to/subscription。
我保留了两个不同的内部列表,一个用于发布者,一个用于订阅者。我想设计它,以便当发布者没有订阅者时,服务器会通知该发布者,以便它可以停止发送消息,直到另一个订阅者订阅该发布者。
我遇到的问题是我不知道如何确定发布者是否没有订阅者,例如假设发布者发布到/path/to/data,然后我需要查找是否有任何订阅者订阅了/path、/path/to 或/path/to/data。
此网络中的每个节点都有一个唯一的 ID,即uuid。每个发布者都有一个SUB-socket 订阅它自己的uuid,以便它可以从服务器接收更新。
【问题讨论】:
标签: c zeromq publish-subscribe