Sto usando un'applicazione di console C++ in Windows. Voglio utilizzare questa applicazione nel mio sito Web in modo tale che l'input sia preso dal lato client che quindi invoca questa applicazione per elaborarlo e l'output sarà inoltrato al server web. Ho sentito parlare di DLL COM ma non so come crearlo per la mia applicazione.Come utilizzare un'applicazione C++ nel server web?
risposta
Si dovrebbe provare a creare uno script cgi, a seconda delle esigenze della propria applicazione, è necessario utilizzare FastCGI (che non crea un intero contesto di processo ogni volta che viene chiamato).
- CGI
È necessario installare un Apache Server e attivare il modulo CGI (il suo attivato di default comunemente). Quindi puoi sviluppare un programma C++, inserire l'eseguibile all'interno della cartella CGI configurata, dare i permessi corretti. Questo script CGI dovrebbe creare una sorta di comunicazione tra processi (potrebbe essere attraverso socket o memoria condivisa, il primo è più semplice). Spero che tu sappia come funziona uno script CGI in C/C++ + Apache, ma è piuttosto semplice, in sintesi ricevi l'ambiente dentro stdin e metti la tua risposta allo stdout.
- FastCGI
È possibile utilizzare apache, installare il modulo FastCGI e creare un thread (che potrebbe essere all'interno del vostro ciclo principale troppo, ma io non consiglio) all'interno del vostro programma e collegare l'apache server FastCGI al tuo demone.
Ultimo ma non meno importante, è necessario eseguire il demone come un servizio.
PS: Ci sono alcune opzioni quadro (come cppcms e peso), ma dal momento che avete già il demone scritto, ho pensato che sarebbe stato un dolore nel culo di cambiare tutto (ovviamente, dipende da un sacco di cose, come la complessità e le dimensioni della vostra applicazione).
Uso CGI: http://cgi.sourceforge.net/
come prendere in ingresso dal lato client?
getenv("QUERY_STRING")
Come inoltrare l'output al server Web?
cout << "<html>\n";
Ciao CGI mondo:
#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;
}
Mentre il suggerimento del codice potrebbe costituire una risposta al domanda, il semplice codice doea non fornisce spiegazioni sul perché e come si sta affrontando la domanda originale. Quindi, per favore aggiungi alcune spiegazioni per fornire maggiori informazioni su ciò che è necessario per risolvere il problema originale. – rpy
Ci sono anche diverse strutture per la loro via di sviluppo, tra cui Wt, cppcms, CSP, e altri. L'implementazione della mainline di FastCGI è in C e supporta direttamente diverse lingue, incluso C++.
Si consiglia di utilizzare il C++ webtoolkit Wt (pronunciato Witty), http://www.webtoolkit.eu/.
Questo framework (con server di applicazioni integrato) consente di progettare applicazioni Web in termini di widget e connessioni segnale/slot e lascia gran parte del cruft Web nelle mani della libreria. Le applicazioni risultanti sono orientate agli oggetti, tipizzate rigorosamente e perfettamente mantenibili. La libreria rileva automaticamente le capacità del browser e utilizza il modo corretto per eseguire il rendering del sito, evitando i bug del browser. Ecco an example of aplication using wt
Vedere anche this thread.
Ho già un'applicazione console C++ che voglio connettere con il mio server web. Verrà eseguito nel server ma utilizzando risorse locali del server. – Mavie
Il mio gruppo ha appena fatto che, come un progetto di classe, abbiamo usato principalmente cpp-netlib come una libreria di rete, ma abbiamo anche usato curlpp per alcune cose minori. L'abbiamo ospitato su un'istallazione di istanze di Amazon EC2 come server Windows, e sei libero di fare l'interfaccia utente come vuoi. Era un progetto abbastanza semplice, ma seguire quella strada non era così limitante come pensavo. Spero che questo aiuti
http://www.tutorialspoint.com/cplusplus/cpp_web_programming.htm – macroland
Quale server Web si intende utilizzare? Apache? IIS? Stai pensando di scriverne uno tuo? Quale piattaforma (Windows/Linux/BSD/BeOS)? – Neil
@Neil Sto usando Apache Tomcat su Windows. – Mavie