C++ 服务器应用程序框架(最好使用BOOST C+;+;)
我正在考虑编写一个服务器应用程序——类似于mySQL或Apache 主要要求是:C++ 服务器应用程序框架(最好使用BOOST C+;+;),c++,boost,C++,Boost,我正在考虑编写一个服务器应用程序——类似于mySQL或Apache 主要要求是: 客户端将通过TCP/IP(套接字)与服务器通信 服务器将产生一个新的子进程来处理请求(ala Apache) 理想情况下,我希望使用BOOST库,而不是尝试重新创建自己的库。一定有代码在某个地方完成了我想做的大部分工作-所以我可以使用它(或者至少是它的一部分作为我的起点),有人能给我指出一个有用的链接吗 在没有代码可以作为起点的情况下(希望不太可能),有人能指出最适合使用的BOOST库吗?以及如何处理的一般指南 我
我从未使用过它,但我打算使用,而且API看起来非常干净 对于Boost库,您需要:
- 助推,助推
- 推进。线程
- Spirit(或类似于解析HTTP协议的东西)
- Boost.IPC
如果您使用的是Linux,
waitpid()
对您有用吗?您可以在非阻塞模式下使用它,每隔一段时间反复检查是否有一个子进程终止。Asio是一个很好的起点
但有几点需要注意:
boost::asio::io_服务
是在fork之前创建的-不要在fork之后的多个进程中使用它)
此外,它不允许您从boost::asio::XX::socket
所以,唯一的方法是调用dup,然后将其传递给子进程
但是说实话?我认为您不会找到任何网络事件循环库
fork-aware(可能除了我写的CppCMS的booster.aio之外)
我自己知道)sigaction
在发送的SIGCHLD
信号上,然后子系统崩溃或退出。
所以你所需要做的就是处理这个信号,然后在主循环中调用waitpid
收到信号
使用asio,您可以使用“自管道”技巧从信号处理程序将循环从睡眠中唤醒<>你可能会对基于Boosi::ASIO:(在一次Boost中提交的)的服务器代码更感兴趣。 < P>我已经用一种模块化的方式制作了一个用于创建C++应用程序的FOS库。它是在 这是我的博客: 它特别适合于创建通用服务器(这是我构建它的动机),但我认为它可以用于任何类型的应用程序
必须与最终二进制文件一起部署的部分是LGPL,因此它可以用于商业应用程序。我不知道您使用的是什么系统,但在Posix系统中,当子系统出于任何原因终止时,父系统会收到一个信号。顺便说一句,在很长一段时间内,为每个连接分叉子进程都不是最先进的技术。它是在Google V8 JavaScript引擎上实现的。我得说它看起来很有前途!Node.js似乎有非常好的响应时间。调试can-MT应用程序很容易变成一场噩梦(至少在我的经验中是这样)。2.健壮性:我不希望一个孩子意外终止服务器,使服务器崩溃。在我看来,你将很难通过这里的线程。每个连接的生成进程将无法扩展。避免共享状态,你的机器翻译不会打扰你。进程池的想法(如davka建议)是非常合理的。事实上,我喜欢进程池的想法(现在为什么我没有想到!)π介子确实看起来很有前途。Boost.IPC是什么?我可以在boost网站上找到它。我可能确实需要一个IPC框架