2

単純なマルチプロセス(スレッドではない)サーバーを作成します。一度に1つのリクエストを処理する反復的な例を見てきました。代わりに、より多くのリクエスト(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
}

ブーストでそのようなことをすることは可能ですか?listenブーストではすべての関数( 、、、bindなどaccept)がvoidを返すため、2つの異なるソケットを取得する方法が本当にわかりません。

4

1 に答える 1

0

はい、Boost.Asio を使用して、接続ごとにプロセスをフォークすることができます。関連する Boost.Asio タイプへの、のマッピングについては、 BSD Socket API Boost.Asio ドキュメントを参照してください。bindlistenaccept

ただし、コメントで指摘したように、このデザインはうまくスケーリングされているとはまったく感じません. 非同期設計パターンを学習し、Boost.Asio ライブラリの真の強みを活用することをお勧めします。詳細については、C10K の問題を参照してください。

于 2011-03-01T22:10:35.210 に答える