将 apache 请求转发到 C++ 程序
Posted
技术标签:
【中文标题】将 apache 请求转发到 C++ 程序【英文标题】:Forwarding apache request to a c++ program 【发布时间】:2013-02-15 10:43:25 【问题描述】:我基本上是在寻找有关如何解决该问题的提示和技巧。
我有一个用 C++ 编写的服务器软件 (Linux)。我需要做的是 提供一些在该软件内部生成的信息,通过 对 apache 网络服务器的 http 调用。
当然可以将数据存储在数据库中并为其编写一个 servlet,或者使用 IPC 获取数据,但我想保持简单并捆绑在一个文件中。我也想知道这个想法是否可行。
所以工作流程如下所示: 客户端 -> Apache Webserver -> C++ 软件
是否有任何现有的库或可以处理 Apache -> C++ 连接的东西?还是只是将请求重定向到 c++ 中的套接字并手动执行?基本上类似于 tomcat 连接器。
编辑
请注意,服务器软件永久在后台运行,不应由调用“启动”
【问题讨论】:
看来您正在寻找 CGI。 感谢您的提示。我将等待更多回复,但我现在正在考虑添加一个 python cgi 脚本,它将为 c++ 程序生成一个 RPC,因为该 RPC 已经存在。 【参考方案1】:有几个选项。
CGI 很简单,并且一直存在。在 CGI 下,Web 服务器将为每个 Web 请求生成一个单独的进程。正如您在评论中提到的,您可以编写一个 CGI 脚本,对您的 C++ 程序进行 RPC 调用。
FastCGI 是 CGI 的替代品;它不是为每个 Web 请求生成一个单独的进程,而是定义了一个协议,让 Web 服务器将多个 Web 请求分派给一个长时间运行的进程。它适用于 Web 应用程序。但是,对于您的场景,您有一个需要添加 Web 界面的预先存在的服务器进程,它可能无法正常工作;根据我有限的理解,Web 服务器通常希望自己启动和停止长时间运行的 FastCGI 进程(以响应传入请求、服务器负载、空闲时间等),而不是连接到预先存在的 FastCGI 进程。 (我认为大多数服务器都会让您重新配置它,但这不是默认设置。)
您还可以始终在您的 C++ 进程中嵌入一个 Web 服务器,如 Mongoose 或 cpp-netlib,并设置 Apache 以代理对它的请求。这可能是您最好的方法。 (例如,Mongoose 非常易于嵌入。)
最后,您可以使用成熟的 Apache 模块(或者将您的 C++ 服务器重新设计为 Apache 模块,或者让 Apache 模块与您的 C++ 服务进行通信)。这可能比您想的要复杂,尽管有像 CPPSERV 这样的现有项目采用这种方法。
【讨论】:
谢谢。我也在考虑包括一个网络服务器的可能性。但我脑子里有 libmicrohttp。需要查看 Mongoose、cpp-netlib 和 libmicrohttp 并测试哪一个最适合。如果它们不能按我需要的方式工作,我可能会使用 CGI/RPC 方法,或者自己编写一个简单的 webserver。以上是关于将 apache 请求转发到 C++ 程序的主要内容,如果未能解决你的问题,请参考以下文章
如何将 websocket 请求从 Apache httpd 转发到 Apache Tomcat?
是否可以在apache代理中将两个不同的URL模式发送到单独的转发代理