Я использую консольное приложение С++ в 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. Ни один из них не является особенно тривиальным, и вам нужно будет много читать.