如何在这种情况下使用ZeroMQ设计结构
  这是我的计划: 
  我有很多代理和一位代理经理。 
  如果一个代理运行,它将连接代理经理说:我是代理。 
  代理管理器可以控制所有运行代理。  例如,代理经理可以说:agent1,plz做某事。  这里是一个例子: 
*****************                       *********
* agent manager * <-----I'm agent1----- * Agent *
*               * ---------OK---------> *       *
*               *                       *       *
*               * ---calculate 1+1----> *       *
*               * <-------It's 2------- *       *
*               * -------go sleep-----> *       *
*               * <--OK, I'm sleeping-- *       *
*               * ------wake up-------> *       *
*               * <---------OK--------- *       *
*               * ---calculate 1+2----> *       *
*               * <-------It's 3------- *       * 
*****************          ...          *********
我正在考虑使用REQ / REP,但它似乎不起作用。 因为事情发生像这样:请求---回复---回复---请求---回复---请求...
  此外,我们可能有不止一个代理商。  这意味着代理经理可以同时控制许多代理。  所以我想用多线程,但我的老板不同意。  他现在想要使用单线程。  所以我认为我应该使用“非阻塞”模式。 
那么,我怎么能设计一个0MQ模式的这种情况与非阻塞?
使用经销商(代理商)/路由器(代理商经理)。 它们将会替代REQ / REP,因为它们或多或少是相同的,只是具有非结构化的通信模式。 您的代理管理器将在消息的第一帧中收到每个代理的ID作为通信的一部分。 它需要跟踪这些ID,以便它可以启动与他们的通信。 有些例子说明了如何在ZMQ指南中起作用,如果你还没有,你应该读一读。 具体来说,看看这个部分看看它是如何工作的。 快速图表:
DEALER1-setID('agent1')                        ROUTER-bind()
DEALER1-connect()-------------------------------->  *
DEALER1-send("I'm agent1")-------------->  ROUTER-recv(['agent1', "I'm agent1"])
DEALER1-recv('OK')  <----------------------ROUTER-send(['agent1', 'OK'])
DEALER2-setID('agent2')
DEALER2-connect()-------------------------------->  *
DEALER2-send("I'm agent2")-------------->  ROUTER-recv(['agent2', "I'm agent2"])
DEALER2-recv('OK')  <----------------------ROUTER-send(['agent2', 'OK'])
DEALER1-recv('calc 1+1')  <----------------ROUTER-send(['agent1', 'calc 1+1'])
DEALER2-recv('calc 1+2')  <----------------ROUTER-send(['agent2', 'calc 1+2'])
DEALER1-send("It's 2")------------------>  ROUTER-recv(['agent1', "It's 2"])
DEALER1-recv('go sleep')  <----------------ROUTER-send(['agent1', 'go sleep'])
DEALER2-send("It's 3")------------------>  ROUTER-recv(['agent2', "It's 3"])
DEALER1-send("OK, I'm sleeping")-------->  ROUTER-recv(['agent1', "OK, I'm sleeping"])
... 等等。 我故意插入了消息响应,只是为了演示它如何处理需要花费不同时间的更复杂的作业。 ROUTER以一种您可以访问的方式接收ID,并由ROUTER发送但由DEALER剥离的方式与这些套接字类型的操作方式有关。 你只需要跟踪这些ID,知道哪些正在使用,并只发送给那些还没有工作的人,直到你收到回复。
链接地址: http://www.djcxy.com/p/18379.html