【发布时间】:2011-03-01 13:51:36
【问题描述】:
我想做一个简单的多进程(不是线程)服务器。我已经看到了它一次处理一个请求的迭代示例。 相反,我需要同时处理更多请求(更少 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 提倡的异步设计模式的精神。
-
完全可以。看看其中一个多线程示例,它通常会在哪里启动另一个线程,您应该能够改为 fork。
-
这与
boost::asio有什么关系? AFAIK,发布的代码都是 POSIX! -
@Matt,你好心告诉我你指的是哪个例子以及我必须在哪里放置 fork() 指令吗?谢谢... Andrè..发布的代码显然是POSIX ..我的问题的目标是在最后两行...那么如果可以使用Boost asio库获得与我通过代码获得的相同行为我已经发布了...
标签: c++ tcp boost-asio multiprocess