Używam aplikacji konsoli C++ w systemie Windows. Chcę korzystać z tej aplikacji na mojej stronie internetowej, aby dane wejściowe były pobierane ze strony klienta, która następnie wywołuje tę aplikację w celu jej przetworzenia, a dane wyjściowe będą przekazywane do serwera WWW. Słyszałem o COM DLL, ale nie wiem, jak utworzyć go dla mojej aplikacji.Jak korzystać z aplikacji C++ na serwerze WWW?
Odpowiedz
Powinieneś spróbować stworzyć skrypt cgi, w zależności od potrzeb twojej aplikacji powinieneś użyć FastCGI (który nie tworzy całego kontekstu procesu za każdym razem, gdy go wywołasz).
- CGI
Należy zainstalować serwer Apache i aktywować moduł cgi (aktywowanej domyślnie powszechnie). Następnie można rozwinąć program C++, umieścić plik wykonywalny w skonfigurowanym folderze CGI, podać poprawne uprawnienia. Ten skrypt CGI powinien tworzyć komunikację między procesami (może to być przez gniazdo lub pamięć współdzieloną, pierwsza jest łatwiejsza). Mam nadzieję, że wiesz, jak działa skrypt CGI w C/C++ + Apache, ale jest to całkiem proste, w podsumowaniu otrzymujesz środowisko wewnątrz standardowego wejścia i umieszczasz swoją odpowiedź na standardowe wyjście.
- FastCGI
Można użyć apache, zainstalować moduł fastcgi i utworzyć wątku (może to być wewnątrz pętli głównej też, ale ja nie polecam) wewnątrz programu i dołączyć apache serwer modułu FastCGI do twojego demona.
Ostatni, ale nie mniej ważny, powinieneś uruchomić demona jako usługę.
PS: Istnieje kilka opcji ramowe (jak cppcms i wag), ale ponieważ masz już demon napisany myślałem, że będzie to ból w osioł zmienić wszystko (oczywiście zależy to od wiele rzeczy, takich jak złożoność i rozmiar twojej aplikacji).
Zastosowanie CGI: http://cgi.sourceforge.net/
Jak wziąć wejście od strony klienta?
getenv("QUERY_STRING")
Jak przekazać dane wyjściowe do serwera WWW?
cout << "<html>\n";
Hello world 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;
}
Podczas gdy sugestia kodu może stanowić odpowiedź na pytanie, sam kod nie dostarcza wyjaśnienia, dlaczego i jak odnosi się do pierwotnego pytania. Więc proszę dodaj wyjaśnienia, aby uzyskać więcej informacji na temat tego, co jest potrzebne do rozwiązania pierwotnego problemu. – rpy
Istnieje nawet kilka ram dla ich rozwój, w tym WT cppcms, CSP i innych. Główną implementacją FastCGI jest C i obsługuje bezpośrednio kilka języków, w tym C++.
Polecam użyć webtoolkit C++ (wymawiane Witty) pod adresem http://www.webtoolkit.eu/.
Ta platforma (ze zintegrowanym serwerem aplikacji) umożliwia projektowanie aplikacji internetowych pod kątem widżetów i połączeń sygnałowych/szczelinowych oraz pozostawia wiele zasobów sieciowych w rękach biblioteki. Otrzymane aplikacje są zorientowane obiektowo, ściśle wpisane i doskonale utrzymywane. Biblioteka automatycznie wykrywa możliwości przeglądarki i wykorzystuje właściwy sposób renderowania witryny, unikając błędów przeglądarki. Oto an example of aplication using wt
Zobacz także this thread.
Mam już aplikację konsoli C++, którą chcę połączyć z moim serwerem WWW. Będzie działał na serwerze, ale bierze lokalne zasoby serwera. – Mavie
Moja grupa właśnie zrobił jako projekt klasy, my głównie cpp-netlib jako biblioteki sieciowej, ale również wykorzystywane curlpp jakiegoś drobne rzeczy. Hostowaliśmy go na instalacji instancji Amazon EC2 jako serwer Windows, a Ty możesz za darmo korzystać z interfejsu użytkownika. To był dość prosty projekt, ale podjęcie tej trasy nie było tak ograniczone, jak myślałem. Nadzieję, że pomaga
http://www.tutorialspoint.com/cplusplus/cpp_web_programming.htm – macroland
Jakiego serwera internetowego zamierzasz użyć? Apache? IIS? Czy planujesz napisać własną? Jaka platforma (Windows/Linux/BSD/BeOS)? – Neil
@Neil Używam Apache Tomcat w systemie Windows. – Mavie