2
我想做一個簡單的多進程(不是線程)服務器。我已經看到了它一次處理一個請求的迭代示例。 相反,我需要在同一時間處理更多請求(多於少於10個)。 在經典的C和C++的例子,我已經看到了服務器的設計類似如下:boost :: asio服務器多進程
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
}
是否有可能做這樣的事情與提升?我真的不知道如何獲取這兩個不同的socket,因爲在boost中所有的函數(listen
,bind
,accept
等)都返回void。
爲什麼你覺得你需要每個連接的進程?這樣的設計根本無法擴展,實際上並不符合由Boost.Asio推廣的異步設計模式的精神。 – 2011-03-01 15:12:28
非常確定你可以。看看其中一個多線程示例,以及它通常會啓動另一個線程的位置,您應該可以改爲fork。 – Matt 2011-03-01 15:23:56
這與boost :: asio有什麼關係? AFAIK,發佈的代碼都是POSIX! – 2011-03-01 19:01:50