2016-06-01 111 views
10

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?

+4

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

+1

Quale server Web si intende utilizzare? Apache? IIS? Stai pensando di scriverne uno tuo? Quale piattaforma (Windows/Linux/BSD/BeOS)? – Neil

+0

@Neil Sto usando Apache Tomcat su Windows. – Mavie

risposta

16

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

6

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

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

4

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.

+0

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

4

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

4

Per prestazioni elevate su Windows e IIS 6, è necessario creare una DLL ISAPI; in IIS 7 dovrai creare un module. Né sono particolarmente banali e dovrai fare molta lettura.