0

我无法理解 zeromq 指南中的 majordomo C 代码的一个方面。当工作人员回复请求时,它如何被路由到正确的客户端。当请求发送给工作人员时,我看不到客户身份是如何传达的?所以我无法理解回复是如何正确路由的。这是 mdbroker.c 中向工作人员发送消息的函数。

static void
s_worker_send (worker_t *self, char *command, char *option, zmsg_t *msg)
{
  msg = msg? zmsg_dup (msg): zmsg_new ();

  //  Stack protocol envelope to start of message
  if (option)
     zmsg_pushstr (msg, option);
  zmsg_pushstr (msg, command);
  zmsg_pushstr (msg, MDPW_WORKER);

  //  Stack routing envelope to start of message
  zmsg_wrap (msg, zframe_dup (self->identity));

  if (self->broker->verbose) {
    zclock_log ("I: sending %s to worker",
        mdps_commands [(int) *command]);
    zmsg_dump (msg);
  }
  zmsg_send (&msg, self->broker->socket);
}

我可能不了解身份和路由器套接字是如何工作的。任何帮助将不胜感激。我还是卡在这里。。

4

1 回答 1

0

该请求以一个消息信封开始,其中包括代理所看到的客户端身份。工人拿到这个信封,保存它,然后把它放回回复上。然后代理可以将回复路由到正确的客户端。这内置于 REQ 和 REP 套接字类型中。

于 2013-09-09T21:07:20.913 回答