如何在没有while循环的情况下使用nanomsg调查架构?

我正在使用IPC的nanomsg用法,并希望使用描述 here的SURVEY-archetype体系结构.在此过程中,进程作为客户端和服务器运行并交换数据.现在服务器有以下代码(也在提供的链接中列出):

int server (const char *url)
{
  int sock = nn_socket (AF_SP, NN_SURVEYOR);
  assert (sock >= 0);
  assert (nn_bind (sock, url) >= 0);
  sleep(1);                                              // wait for connections
  int sz_d = strlen(DATE) + 1;                           // '\0' too
  printf ("SERVER: SENDING DATE SURVEY REQUEST\n");
  int bytes = nn_send (sock, DATE, sz_d, 0);
  assert (bytes == sz_d);
  while (1)
    {
      char *buf = NULL;
      int bytes = nn_recv (sock, &buf, NN_MSG, 0);
      if (bytes == ETIMEDOUT) break;
      if (bytes >= 0)
      {
        printf ("SERVER: RECEIVED \"%s\" SURVEY RESPONSE\n", buf);
        nn_freemsg (buf);
      }
    }
  return nn_shutdown (sock, 0);
}

由于套接字类型为NN_SURVEYOR,因此while循环不会在nn_recv处等待.对于客户端,套接字类型是NN_RESPONDENT,因此,客户端中的循环等待nn_recv.

现在,由于while循环连续无限运行,CPU使用率高达99%.你能否告诉我,还有其他方法可以使用nanomsg进行调查架构.

最佳答案 如果没有收到任何内容,请尝试在循环结束时添加yield()调用.

点赞