私はシンプルなマルチプロセス(スレッドではない)サーバーを作りたいと思います。私は一度に1つの要求を処理する反復的な例を見てきました。 代わりに、私は同時に多くのリクエスト(10件以上)を処理する必要があります。boost :: asio serverマルチプロセス
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
}
はブーストでそのような何かをすることが可能です: は、古典的なCおよびC++の例では、私は、サーバーは、次のように設計されていることを見てきましたか?私は実際にすべての機能(listen
、bind
、accept
など)を無効に戻すので、2つの異なるソケットを取得する方法を知りません。
接続ごとにプロセスが必要なのはなぜですか?このようなデザインは単純に拡張されておらず、実際にはBoost.Asioによって推進される非同期デザインパターンの精神ではありません。 –
できることは間違いありません。マルチスレッドの例の1つを見て、それが通常別のスレッドを開始するところで、代わりにforkすることができます。 – Matt
これは、 'boost :: asio'とどの部分が関係していますか? AFAIK、投稿されたコードはすべてPOSIXです! –