2015-10-27 2 views
4

я проходил через использование 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.

ответ

1

Попробуйте добавить вызов yield() в конец цикла, если ничего не получено.

Смежные вопросы