Как использовать приложение С++ на веб-сервере?

Я использую консольное приложение С++ в Windows. Я хочу использовать это приложение на своем веб-сайте так, чтобы вход был сделан с клиентской стороны, который затем вызывает это приложение для его обработки, и вывод будет перенаправлен на веб-сервер. Я слышал о COM DLL, но не знаю, как его создать для моего приложения.

Ответ 1

Вам следует попробовать создать cgi script, в зависимости от потребностей вашего приложения вы должны использовать FastCGI (который не создает весь контекст процесса каждый раз, когда вы его вызываете).

  • CGI

Необходимо установить сервер Apache и активировать модуль cgi (его обычно активируют по умолчанию). Затем вы можете разработать С++-программу, поместить исполняемый файл внутри сконфигурированной папки CGI, предоставить правильные разрешения. Этот CGI script должен делать какую-то межпроцессную связь (это может быть через сокет или разделяемую память, первая из них проще). Надеюсь, вы знаете, как CGI script работает в C/С++ + Apache, но его довольно прямолинейно, в итоге вы получаете среду внутри stdin и отправляете свой ответ на stdout.

  • FastCGI

Вы можете использовать apache, установить модуль fastcgi и создать поток (он может быть внутри вашего основного цикла тоже, но я не рекомендую) внутри вашей программы и подключить модуль FastCGI сервера Apache к вашему демону.

И последнее, но не менее важное: вы должны запустить своего демона в качестве службы.

PS: Существуют некоторые варианты инфраструктуры (например, cppcms и wt), но поскольку у вас уже есть демон, я думал, что это будет боль в задницу изменить все (конечно, это зависит от многих вещи, такие как сложность и размер вашего приложения).

Ответ 2

Используйте 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;
}

Ответ 3

Существует даже несколько рамок для их разработки, включая Wt, cppcms, CSP и другие. FastCGI mainline реализуется на C и напрямую поддерживает несколько языков, включая С++.

Я рекомендую использовать С++ webtoolkit Wt (произносится Witty), http://www.webtoolkit.eu/.

Эта структура (со встроенным сервером приложений) позволяет вам создавать веб-приложения с точки зрения виджетов и соединений с сигналами/слотами, а также оставляет большую часть паутины в руках библиотеки. Результирующие приложения являются объектно-ориентированными, строго типизированными и прекрасно поддерживаемыми. Библиотека автоматически определяет возможности браузера и использует правильный способ рендеринга сайта, избегая ошибок браузера. Вот пример использования с использованием wt

Также см. этот поток.

Ответ 4

Моя группа просто сделала это как классный проект, мы в основном использовали cpp-netlib в качестве сетевой библиотеки, но мы также использовали curlpp для некоторых незначительных вещей. Мы разместили его на установке экземпляра Amazon EC2 в качестве сервера Windows, и вы можете свободно выполнять пользовательский интерфейс, но вы действительно хотите. Это был довольно простой проект, но этот маршрут был не таким ограниченным, как я думал. Надеюсь, что поможет

Ответ 5

Для высокой производительности в Windows и IIS 6 вы хотите создать dll ISAPI; в IIS 7 вам нужно создать module. Ни один из них не является особенно тривиальным, и вам нужно будет много читать.