2016-06-01 39 views
10

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?

+4

http://www.tutorialspoint.com/cplusplus/cpp_web_programming.htm – macroland

+1

Jakiego serwera internetowego zamierzasz użyć? Apache? IIS? Czy planujesz napisać własną? Jaka platforma (Windows/Linux/BSD/BeOS)? – Neil

+0

@Neil Używam Apache Tomcat w systemie Windows. – Mavie

Odpowiedz

16

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).

6

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; 
} 
+1

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

4

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.

+0

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

4

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

4

Aby uzyskać wysoką wydajność w systemach Windows i IIS 6, chcesz utworzyć bibliotekę dll o wartości ISAPI; w IIS 7 będziesz chciał stworzyć module. Żadne z nich nie jest szczególnie trywialne i będziesz musiał dużo czytać.