boost :: asio сервер многопроцессный - PullRequest
2 голосов
/ 01 марта 2011

Я хотел бы сделать простой многопроцессорный (не потоковый) сервер. Я видел итерационный пример, в котором он обрабатывает один запрос за раз. Вместо этого мне нужно обрабатывать больше запросов (больше на 10 меньше) одновременно. В классических примерах c и c ++ я видел, что сервер спроектирован следующим образом:

int listensd, connsd; // listening socket and conection socket
pid_t pid;            //process id
listensd=socket(....); 
bind(listensd,...);
listen(listensd,...);
for(;;)
{

  connsd=accept(listensd,...);
  if((pid=fork())==0)  //child process
  {
        close(listensd);  //close the listen socket
        do_it(connsd);    //serve the request
        close(connsd);    //close the connection socket
        exit(0); 
   }
close(connsd);     //the parent closes the connection socket
}

Можно ли сделать что-то подобное с бустом? Я действительно не знаю, как получить два разных сокета, потому что в boost все функции (listen, bind, accept и т. Д.) Возвращают void.

1 Ответ

0 голосов
/ 02 марта 2011

Да, можно использовать Boost.Asio для разветвления процесса для каждого соединения.См. Документацию BSD Socket API Boost.Asio для сопоставлений bind, listen, accept в соответствующие типы Boost.Asio.в моем комментарии я не чувствую, что этот дизайн вообще хорошо масштабируется.Вам лучше изучать асинхронные шаблоны проектирования и использовать реальные преимущества библиотеки Boost.Asio.Для получения дополнительной информации см. Проблему C10K .

.
...