如何在web服务器中使用c++应用程序

How to use a c++ application in web server?

本文关键字:c++ 应用程序 服务器 web      更新时间:2023-10-16

我在windows中使用C++控制台应用程序。我想在我的网站上使用这个应用程序,以便从客户端获取输入,然后客户端调用这个应用程序进行处理,输出将转发到web服务器。我听说过COM DLL,但不知道如何为我的应用程序创建它。

您应该尝试创建一个cgi脚本,根据应用程序的需要,您应该使用FastCGI(它不会在每次调用时创建整个过程上下文)。

  • CGI

您应该安装Apache Server并激活cgi模块(通常默认情况下会激活)。然后,您可以开发一个c++程序,将可执行文件放入配置的CGI文件夹中,并赋予正确的权限。这个CGI脚本应该可以进行某种进程间通信(可以通过套接字或共享内存,第一个更容易)。我希望你知道CGI脚本是如何在C/C++Apache中工作的,但它非常直接,总之,你会收到stdin中的环境,并将答案提交给stdout。

  • FastCGI

您可以使用apache,安装fastcgi模块,并在程序中创建一个线程(它也可能在您的主循环中,但我不建议),然后将apache服务器fastcgi模块连接到您的守护进程。

最后但同样重要的是,您应该将守护进程作为服务运行。

PS:有一些框架选项(如cppcms和wt),但由于你已经写了守护进程,我想这会很痛苦改变一切(当然,这取决于很多例如应用程序的复杂性和大小)。

使用CGI:http://cgi.sourceforge.net/

如何从客户端获取输入?

getenv("QUERY_STRING")  

如何将输出转发到web服务器?

cout << "<html>n";

Hello world CGI:

#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
cout << "Content-type:text/htmlrnrn";
cout << "<html>n";
cout << "<head>n";
cout << "<title>Hello World - First CGI Program</title>n";
cout << "</head>n";
cout << "<body>n";
cout << "<h2>Hello World! This is my first CGI program</h2>n";
cout << "<p>REQUEST_METHOD = " << getenv("REQUEST_METHOD") << "</p>n";
cout << "<p>QUERY_STRING = " << getenv("QUERY_STRING") << "</p>n";
cout << "</body>n";
cout << "</html>n";
return 0;
}

甚至有几个框架用于开发它们,包括Wt、cppcms、CSP等。FastCGI的主线实现是用C语言实现的,并且直接支持多种语言,包括C++。

我建议使用C++网络工具包Wt(发音为Witty),位于http://www.webtoolkit.eu/.

这个框架(带有集成的应用程序服务器)允许您根据窗口小部件和信号/插槽连接来设计web应用程序,并将大部分web难题留给库。生成的应用程序是面向对象的、严格类型化的,并且完全可维护。该库自动检测浏览器的功能,并使用正确的方式渲染网站,避免浏览器错误。以下是使用wt 应用的示例

另请参阅此线程。

我的团队只是作为一个类项目来做这件事,我们主要使用cpp-netlib作为网络库,但我们也将curlpp用于一些次要的东西。我们将其托管在作为windows服务器的AmazonEC2实例设置上,您可以自由地执行您真正想要的UI。这是一个相当简单的项目,但走这条路并没有我想象的那么有限。希望这能帮助

为了在Windows和IIS 6上获得高性能,您需要创建一个ISAPI dll;在IIS 7中,您将希望创建一个模块。两者都不是特别琐碎,你将不得不做大量的阅读。