我无法理解zeromq指南中找到的majordomo C代码的一个方面。当工作人员回复请求时,它如何被路由到正确的客户端。当请求发送给工作人员时,我无法看到如何传达客户端身份?因此无法理解回复如何正确路由。这是mdbroker.c中的函数,它向worker发送一条消息。
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);
}
我可能不了解身份和路由器套接字的工作原理。任何帮助将不胜感激。我仍然被困在这里..
答案 0 :(得分:0)
请求以消息信封开头,其中包括代理看到的客户端的标识。工作人员获取此信封,保存并将其放回到回复中。然后代理可以将回复路由到正确的客户端。它内置于REQ和REP套接字类型。