я проходил через использование nanomsg
для IPC
и хотел использовать SURVEY
-archetype архитектуры описано here.
В этом случае процессы выполняются как клиентские и серверные, а также обмениваются данными. В настоящее время сервер имеет следующий код (также перечислены в представленной ссылке):Как использовать архитектуру съемки nanomsg без цикла while?
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
-loop не ждать в nn_recv
. Для клиента тип сокета - NN_RESPONDENT
, и поэтому, пока цикл в клиенте ждет на nn_recv
.
Теперь, когда цикл while работает непрерывно и бесконечно, загрузка ЦП достигает 99%. Не могли бы вы сказать мне, что есть другой способ сделать обзорную архитектуру, используя nanomsg
.