6

我基本上是在寻找有关如何解决该问题的提示和技巧。

我有一个用 C++ 编写的服务器软件 (Linux)。我需要做的是提供一些信息,这些信息是通过对 apache 网络服务器的 http 调用在该软件内部生成的。

当然可以将数据存储在数据库中并为其编写一个 servlet,或者使用 IPC 获取数据,但我想保持简单并捆绑在一个文件中。我也想知道这个想法是否可行。

所以工作流程看起来像:客户端 -> Apache Webserver -> C++ 软件

是否有任何现有的库或可以处理 Apache -> C++ 连接的东西?还是只是将请求重定向到 c++ 中的套接字并手动执行?基本上类似于 tomcat 连接器。

编辑

请注意,服务器软件永久在后台运行,不应通过调用“启动”

4

1 回答 1

6

有几个选项。

CGI很简单,并且一直存在。在 CGI 下,Web 服务器将为每个 Web 请求生成一个单独的进程。正如您在评论中提到的,您可以编写一个 CGI 脚本,对您的 C++ 程序进行 RPC 调用。

FastCGI是 CGI 的替代品;它不是为每个 Web 请求生成一个单独的进程,而是定义了一个协议,让 Web 服务器将多个 Web 请求分派给一个长时间运行的进程。它适用于 Web 应用程序。但是,对于您的场景,您有一个需要添加 Web 界面的预先存在的服务器进程,它可能无法正常工作;根据我有限的理解,Web 服务器通常希望自己启动和停止长时间运行的 FastCGI 进程(以响应传入请求、服务器负载、空闲时间等),而不是连接到预先存在的 FastCGI 进程。(我认为大多数服务器都会让您重新配置它,但这不是默认设置。)

您还可以始终在您的 C++ 进程中嵌入像Mongoosecpp-netlib这样的 Web 服务器,并设置 Apache 以代理对它的请求。这可能是您最好的方法。(例如,Mongoose非常容易嵌入。)

最后,您可以使用成熟的 Apache 模块(或者将您的 C++ 服务器重新设计为 Apache 模块,或者让 Apache 模块与您的 C++ 服务进行通信)。这可能比您想要做的更复杂,尽管有像CPPSERV这样的现有项目采用这种方法。

于 2013-02-15T13:50:17.477 回答