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