[英]boost::asio server multi-process
我會做一個簡單的多進程(不是線程)服務器。 我已經看到了一個迭代示例,其中它一次處理一個請求。 相反,我需要同時處理更多的請求(少於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做類似的事情? 我真的不知道如何獲得兩個不同的套接字,因為在boost中,所有函數( listen
, bind
, accept
等)都返回void。
是的,可以使用Boost.Asio為每個連接派生一個進程。 請參閱BSD Socket API Boost.Asio文檔以獲取bind
, listen
和accept
到相關Boost.Asio類型的映射。
但是,正如我在評論中指出的那樣,我認為這種設計的擴展性根本不好。 您最好學習異步設計模式並利用Boost.Asio庫的真正優勢。 有關更多信息,請參見C10K問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.