0

zeromq ガイドにある majordomo C コードの一部を理解できません。ワーカーがリクエストに応答するとき、正しいクライアントにどのようにルーティングされますか。リクエストがワーカーに送信されたときに、クライアント ID がどのように伝達されているかを確認できません。そのため、返信が適切にルーティングされる方法を理解できません。ワーカーにメッセージを送信する 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);
}

ID とルーター ソケットがどのように機能するかを理解していない可能性があります。どんな助けでも大歓迎です。私はまだここで立ち往生しています..

4

1 に答える 1

0

要求はメッセージ エンベロープで始まります。これには、ブローカーから見たクライアントの ID が含まれます。ワーカーはこのエンベロープを取得して保存し、返信に戻します。その後、ブローカーは応答を正しいクライアントにルーティングできます。これは、REQ および REP ソケット タイプに組み込まれています。

于 2013-09-09T21:07:20.913 に答える