Sockets ZeroMQ REP套接字中的主题

Sockets ZeroMQ REP套接字中的主题,sockets,filtering,zeromq,publish-subscribe,Sockets,Filtering,Zeromq,Publish Subscribe,当使用SUB类型的ØMQ套接字时,可以使用 sub_socket.setsockopt_string(zmq.SUBSCRIBE, 'topic') REPsockets是否也有同样的可能,允许工作人员只处理特定主题,而将其他主题留给不同的工作人员 我很担心这是不可能的,引用: 在当前版本的ØMQ中,过滤发生在订阅者端,而不是发布者端 不过,我还是想问,是否有什么诀窍可以实现这一点,因为这样的功能会对我的基础设施产生巨大影响。没有。我是否可以假设您有一个REQ或DEALER服务器套接字,它将工

当使用
SUB
类型的ØMQ套接字时,可以使用

sub_socket.setsockopt_string(zmq.SUBSCRIBE, 'topic')
REP
sockets是否也有同样的可能,允许工作人员只处理特定主题,而将其他主题留给不同的工作人员

我很担心这是不可能的,引用:

在当前版本的ØMQ中,过滤发生在订阅者端,而不是发布者端


不过,我还是想问,是否有什么诀窍可以实现这一点,因为这样的功能会对我的基础设施产生巨大影响。

没有。我是否可以假设您有一个
REQ
DEALER
服务器套接字,它将工作发送给
REP
工作人员,然后将完成的工作返回给服务器?您正在寻找一种让服务器与特定客户机通信的方法,而不是以循环方式分发任务


不行,这些套接字始终只是循环。如果要与特定客户机通信,您必须拥有一个仅与该客户机通信的套接字,或者必须从该客户机启动通信(切换套接字配对,以便工作程序请求其准备好的任何工作,服务器响应该工作,然后工作程序使用已完成的工作创建一个新请求)。做任何事情都会变得更加复杂。

你的假设绝对正确,这正是我想要做的。好的,谢谢你明确的回答,似乎我必须为每个主题分别实例化“经销商”:(通信必须从服务器开始是有原因的吗?执行req/路由器并仅从工作者开始可能会大大简化您的体系结构,中有几个示例。我希望我没有使用不正确的术语——我使用的正是此拓扑:。通信从客户端开始,但不幸的是,我有几个主题,每个主题都需要大量的RAM,因此需要一部分专门的工作人员(或服务,如果遵循图中的术语)在不同的机器上。如果我可以通过服务订阅主题,事情会很简单。但是因为你说这是不可能的,我必须为每个主题实例化单独的
路由器
-
经销商
代理。我现在理解得稍微好一点,但你还有其他选择。我会将其更改为
客户端T/Req->代理/路由器代理/路由器代理基本上是你的服务器,它是链接拓扑中间的那一块…但是要记住的是ZMQ不是一个完全的消息传递系统,它实际上是一组你可以用来构建你的消息系统的工具。r如果有一个代理可以帮助您实现消息传递目标,那么就不要将其作为该系统的一部分。