我基本上在寻找有关如何处理该问题的提示和技巧。
我有一个用C ++编写的服务器软件(Linux)。我需要做的是 通过提供在该软件内部生成的一些信息 对apache webserver的http调用。
当然可以将数据存储在数据库中并为其编写servlet,或者使用IPC来获取数据,但我想保持简单并捆绑在一个文件中。而且我想知道这个想法是否有效。
所以工作流程看起来像: 客户 - > Apache Webserver - > C ++软件
是否有任何现有的库或可以处理Apache的东西 - > C ++连接?或者它是否只是将请求重定向到c ++中的套接字并手动执行?基本上就像tomcat连接器。
请注意,服务器软件在后台永久运行,不应通过呼叫“启动”
答案 0 :(得分:4)
有几个选择。
CGI很简单,一直存在。在CGI下,Web服务器将为每个Web请求生成一个单独的进程。正如您在评论中提到的,您可以编写一个CGI脚本,对您的C ++程序进行RPC调用。
FastCGI是CGI的替代品;它不是为每个Web请求生成一个单独的进程,而是定义了一个协议,用于让Web服务器将多个Web请求分派给一个长时间运行的进程。它适用于Web应用程序。但是,对于您的场景,您有一个需要添加Web界面的预先存在的服务器进程,它可能无法正常工作;基于我有限的理解,Web服务器通常希望自己启动和停止长时间运行的FastCGI进程(响应传入的请求,服务器负载,空闲时间等),而不是连接到预先存在的FastCGI进程。 (我认为,大多数服务器都会让你重新配置它,但它不是默认设置。)
您还可以在C ++进程中始终嵌入像Mongoose或cpp-netlib这样的Web服务器,并设置Apache以代理对它的请求。这可能是您最好的方法。 (例如,猫鼬很容易嵌入。)
最后,您可以使用完整的Apache模块(将C ++服务器重新设计为Apache模块,或者使用Apache模块与C ++服务进行通信)。这可能比你想做的更复杂,尽管现有的项目如CPPSERV采用了这种方法。