如何在 Web 服务器中使用 C++ 应用程序?

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

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

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

如何从客户端获取输入?

getenv("QUERY_STRING")  

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

cout << "<html>\n";

你好世界 CGI:

#include <iostream>
#include <cstdlib>

using namespace std;

int main ()
{

   cout << "Content-type:text/html\r\n\r\n";
   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++ webtoolkit Wt(读作 Witty),位于 http://www.webtoolkit.eu/

这个框架(带有集成的应用程序服务器)让您可以根据小部件和 signal/slot 连接来设计 Web 应用程序,并将大部分 Web 内容留给图书馆处理。由此产生的应用程序是面向对象的、严格类型化的并且完全可维护的。该库自动检​​测浏览器的功能并使用正确的方式呈现站点,从而避免浏览器错误。这里是an example of aplication using wt

另见 this thread

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

  • CGI

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

  • FastCGI

你可以使用 apache,安装 fastcgi 模块并在你的程序中创建一个线程(它也可以在你的主循环中,但我不推荐)并将 apache 服务器 FastCGI 模块附加到你的守护进程。

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

PS : There are some framework options(like cppcms and wt), but since you already have the daemon written i thought it would be a pain in the ass to change everything (of course, it depends on a lot of things, like the complexity and size of your application).

我的小组只是将其作为一个 class 项目来做,我们主要使用 cpp-netlib as a network library, but we also used curlpp 来处理一些小事。我们将其托管在 Amazon EC2 实例上,设置为 windows 服务器,您可以自由地执行 UI 任何您真正想要的操作。这是一个相当简单的项目,但走这条路并没有我想象的那么局限。希望有帮助

为了在 Windows 和 IIS 6 上实现高性能,您需要创建一个 ISAPI dll; in IIS 7 you will want to create a module。两者都不是特别微不足道,你将不得不做大量的阅读。