如何使ZeroMQ PUSH / PULL与身份一起工作?

时间:2017-07-12 16:42:09

标签: zeromq

我有一个具有全面通信模式的应用程序。我认为在每个N个进程上都有一个PULL套接字和一个PUSH套接字是有意义的,并且所有PUSH个套接字都连接到所有PULL个套接字。但是,我不是以循环方式选择接收器,而是根据具体情况选择性地发送给特定的接收器。例如,如果我想从进程的PUSH套接字 - i 向进程的PULL套接字发送消息 - {{1你知道怎么做吗?

关注1:

我能想到的一个解决方案是在每个进程上创建一个j套接字,每个ROUTER套接字将连接到其他进程的所有ROUTER套接字(全部 - 全部连接)。那会有用吗?

关注2:

我能想到的另一个解决方案是使用ROUTERROUTER套接字。也许我可以让每个进程创建一个DEALER套接字来连接到每个其他进程的DEALER套接字(多个一对一连接)。这是一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果确实是完全(内部)网状星型拓扑结构的朋友,那么带有TOPIC过滤器的PUB/SUB可能会很好地适用于您的场景。

所有SUB - s .connect()PUB - s,.bind(),反向.bind()/.connect() - s也是可行的。较新的版本进行PUB端TOPIC过滤,因此在一些合理大小的 N -s中,该方案就足够了。 .setsockopt()调整显而易见且需要。

由于没有提到延迟,攻击或消息大小,因此很难将全网状星形拓扑结构的缺点和优点与针对"软控制的旋转传递或其他进行比较低资源消耗方法。

  

(我仍在使用 ZeroMQ 2.1.11 并喜欢这样做)

也许还喜欢this new, custom-made scalable formal communication pattern design example - 对于Martin SUSTRIK的可爱引擎来说,这是一个有趣的方法,如果需要超过~10k +代理商的话。