如何在web服务器中使用c++应用程序
How to use a c++ application in web server?
我在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中,您将希望创建一个模块。两者都不是特别琐碎,你将不得不做大量的阅读。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?