2

我想做一个简单的多进程(不是线程)服务器。我已经看到了它一次处理一个请求的迭代示例。相反,我需要同时处理更多请求(更少 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、、、bindaccept)都返回 void。

4

1 回答 1

0

是的,可以使用 Boost.Asio 为每个连接分叉一个进程。有关, ,到相关 Boost.Asio 类型的映射,请参阅BSD Socket API Boost.Asio 文档。bindlistenaccept

不过,正如我在评论中指出的那样,我觉得这种设计根本无法很好地扩展。您最好学习异步设计模式并使用 Boost.Asio 库的真正优势。有关详细信息,请参阅C10K 问题

于 2011-03-01T22:10:35.210 回答