c++ - 服务器应用程序框架(最好使用 BOOST C++)

标签 c++ boost

我正在考虑编写一个服务器应用程序 - 按照 mySQL 或 Apache 的思路。

主要要求是:

  1. 客户端将通过 TCP/IP(套接字)与服务器通信
  2. 服务器将产生一个新的子进程来处理请求(ala Apache)

理想情况下,我想使用 BOOST 库,而不是尝试重新发明自己的库。某处必须有代码可以完成我想做的大部分事情 - 这样我就可以使用它(或至少它的一部分作为我的起点)任何人都可以为我指出一个有用的链接吗?

在(希望不太可能)没有我可以用作起点的代码的情况下,有人可以指出最适合使用的 BOOST 库 - 以及如何进行的一般指南。

我主要担心的是如何知道其中一个 child 何时坠毁。据我所知,有两种方法可以做到这一点:

  1. 在 parent 和 child 之间使用心跳(这很快就会变得困惑,并引入更多可能出错的事情)
  2. 以某种方式用超时参数包装进程的生成 - 但这是一种愚蠢的方法,因为如果 child 正在执行时间密集型工作, parent 可能会错误地认为 child 已经死了

让 parent 知道 child 已经死亡的最佳做法是什么?

[编辑]

顺便说一句,我正在 Linux 上开发/运行/部署

最佳答案

在什么平台上(Windows/Linux/两者)? Windows 上的进程被认为比 Linux 上的进程更重量级,因此您确实可以考虑线程。

此外,我认为最好不要为每个请求生成一个进程(就像 Apache 那样),而是拥有一个进程池,这样可以节省创建进程的成本,尤其是在 Windows 上。

如果您使用的是 Linux,waitpid() 对您有用吗?您可以在非阻塞模式下使用它以一定的间隔周期性地检查子进程之一是否终止

关于c++ - 服务器应用程序框架(最好使用 BOOST C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4212811/

相关文章:

C++ : Using a int pointer to point to a vector created inside a function

c++ - 如何部分特化模板 C++ 类?

c++ - 在C++中异步执行sql查询

c++ - 为什么 boost 的 managed_mapped_file::shrink_to_fit 在 Windows 和 Linux 上表现不同?

c++ - CMake 在我的主机中找不到用于交叉编译器的 boost 库,但在 Raspberry Pi 中找到了

c++ - 强制删除 boost::signals2 中的插槽

C++ 前向声明(指针)- 访问成员

c++ - 面向初学者的 Qt 教程

c++ - 使用 C++ 在超时后重置变量

c++ - "if constexpr()"与 "if()"之间的区别