Я бы сделал простой многопроцессорный (не потоковый) сервер. Я видел итеративный пример, в котором он обрабатывает один запрос за раз. Вместо этого мне нужно обрабатывать больше запросов (больше на менее 10) одновременно. В классическом С и С ++ примеров, я видел, что сервер разработан так:boost :: asio server multi-process
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
и т. Д.) Return void.
Почему вы чувствуете, что вам нужен процесс за соединение? Такой дизайн просто не масштабируется и действительно не в духе асинхронных шаблонов дизайна, продвигаемых Boost.Asio. –
Совершенно уверен, что вы можете. Посмотрите на один из многопоточных примеров и где он обычно запускает другой поток, вы должны иметь возможность использовать fork. – Matt
Какая часть этого связана с 'boost :: asio'? AFAIK, опубликованный код - все POSIX! –