Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    115

    [C++] Connessione a WebServer

    Salve ragazzi, volevo sapere come funziona la creazione di un WebServer online (che ospiti N utenti collegati che possono interagire tra loro in tempo reale) e se esiste un modo per connettersi tramite il C++. Ora, so che è una domanda enormemente generica e che non esiste una precisa risposta. Se potete orientarmi verso questi argomenti sarebbe davvero un grandissimo aiuto per me. Precisamente:

    - Come funziona un WebServer e come poterne creare e gestire uno (a livello teorico principalmente);
    - Come creare un applicazione in C++ che si connetta ad un WebServer.

    Grazie a tutti.

  2. #2
    Un webserver non è altro che un server che "parla" il protocollo HTTP e risponde alle richieste secondo qualche logica. Da un lato c'è la parte di gestione delle connessioni - il server sta in ascolto su una porta TCP (tipicamente la porta 80) e "parla" con i client secondo il protocollo HTTP (di cui puoi trovare le specifiche fondamentalmente in questa RFC).
    Il protocollo HTTP funziona a "richieste" e "risposte" secondo un protocollo stile telnet (anche qui, i dettagli stanno nelle RFC); il client fa richieste (ad esempio, GET /), il server risponde con uno status code (classici il 200 - OK; 404 - Not found e compagnia) ed eventualmente i dati corrispondenti.
    Dall'altro lato, c'è la parte di con che logica gestire le richieste; un server HTTP semplice e che serve solo pagine statiche ha una directory (web root) in cui va a pescare i file che fornisce ai client. Nel momento in cui un client fa una richiesta (tipo GET /directory/nomefile.txt) il server va a vedere se nella web root c'è questo file, e in tal caso ne fornisce il contenuto al client.
    Server web "veri" ovviamente sono molto più complessi - forniscono funzionalità di URL rewriting, gestione di più virtual host nello stesso server, pagine di errore personalizzate, e soprattutto pagine dinamiche, ovvero, in base a qualche logica (tipicamente l'estensione della pagina memorizzata nella web root, ma non solo) un certo file non viene fornito al client così com'è, ma viene eseguito o interpretato in qualche maniera e il risultato di questa elaborazione viene servito al client.

    Il client, dall'altro lato, è un programma che apre una connessione a server web usando un socket; anche in questo caso deve seguire le specifiche del protocollo HTTP nel fare le richieste ai web server. In genere comunque è un lavoro molto più semplice - non devi gestire più connessioni in contemporanea e puoi implementare giusto il codice per creare le richieste che ti servono (tipicamente giusto GET).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    115
    Ti ringrazio per la tempestiva risposta. A livello concettuale ne so qualcosa riguardo Server e Client, avendo studiato tale argomento in ambito di reti e protocolli Ethernet. Il tuo accenno è davvero molto chiaro e mi ha chiarito che non è poi così differente da come pensavo. Una domanda: Se volessi, ad esempio, creare una pagina in cui sono collegati in tempo reali due utenti. La pagina fornisce un bottone, chi dei due utenti riesce a schiacciare il bottone viene indirizzato su un'altra pagina, mentre l'altro su una differente. Questo è un esempio banalissimo, però mi aiuterebbe a chiarire altri piccoli dubbi.
    Ovviamente parlo di "pagine", ma potrei parlare anche di un applicazione che indirizza gli utenti (a seconda di chi ha schiacciato o mento un casuale bottone) a punti differenti del codice sorgente, dato che comunque io parlavo proprio in ambito C++.

  4. #4
    Si può fare; la pagina viene fornita tramite una richiesta GET, il bottone fa effettuare al browser una richiesta GET o una POST (a seconda di come è impostato il form) in cui viene specificato che è stato premuto il pulsante. A seconda della condizione che ti pare il tuo server può poi servire la pagina che preferisce in risposta.

    In ogni caso, a meno di non essere in ambito embedded dove ogni byte di memoria è importante, non è una buona idea implementare ex-novo un server HTTP per questo genere di necessità, visto che implementare in maniera completa/corretta il protocollo HTTP (possibilmente senza avere codice pieno di falle di sicurezza) non è banalissimo (e comunque sarebbe reinventare la ruota per l'ennesima volta).

    Quello che si fa normalmente, invece, è usare un webserver già pronto, abbinato o a linguaggi lato server gestiti direttamente come moduli del webserver (vedi Apache con mod_php, mod_ruby, mod_mono e compagnia), o tramite CGI (quando arriva una richiesta HTTP il webserver avvia un tuo eseguibile fornendogli i dati della richiesta) o FastCGI (analogo, ma il tuo eseguibile è sempre in esecuzione e i dati arrivano dal webserver via socket locale), in modo da disaccoppiare la logica di gestione delle richieste HTTP da quella specifica della tua applicazione.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.