Egyszerű C++ webszerver

Egyszeru C Webszerver



Ebben a cikkben a webszerverekről fogunk tanulni C++ nyelven. A webszerver fő célja, hogy kezelje a beérkező HTTP kéréseket, feldolgozza az összes érkező kérést, és cserébe válaszoljon a webes HTML tartalommal. Fenn kell tartanunk a webszervert C++ nyelven úgy, hogy a C++ környezetben csak a hálózati könyvtárakat, például a „socketeket” adjuk hozzá a hálózati kommunikáció és a problémák kezeléséhez. A webszerver az internet gerince, és a felhasználók és a fő szerverek közötti kommunikáció egyik módja. Értékeljük egy egyszerű webszerver létrehozásának folyamatát megfelelő példamegvalósításokon keresztül.

A környezet beállítása

Először be kell állítanunk az összes szükséges opciót a környezetünkben. A socketeket kell használnunk a bejövő HTTP kérések meghallgatásához. Ezt követően a socketet a gazdagép adott portjához kötjük rendszerünkként. Ezt követően, amikor az ügyfelek kérik a kérést, a szerver meghallgatja ezeket a bejövő kapcsolt kéréseket. A szerver HTTP-kéréseken keresztül válaszol a felhasználó kérésére, hogy lekérje a felhasználó kérését a szerverhez. Ezt követően a szerver kezeli a kérést, és a HTTP-válaszokat megfelelő kivitelezéssel visszaküldi a felhasználónak.







A webszerver socketek kezelése

Ezen a foglalkozáson megtudjuk, hogy a socketek kommunikációt hoznak létre a rendszerünkben futó különböző folyamatok között. A socketek alapvetően a kliens böngészője és a szerverünk közötti kommunikáció vagy kapcsolat létrehozására szolgálnak. Az aljzat bekötése C++ nyelven az alábbiakban leírt módon épül fel:



Itt a socket-könyvtárakat a következőképpen fogjuk meghatározni: „#include ”. A fő függvényben létrehozzuk a socketet a „server_fd” inicializálásával. Ezt követően ellenőrizzük a „server_fd” értékét, amely a készletkapcsolat érvényesítését tartalmazza. Ha a szerver nem működik, és nem működik megfelelően, akkor a „Socket létrehozása sikertelen” üzenetet küldi vissza vagy jeleníti meg. Ellenkező esetben a webszerver IP-címét tartalmazó üzenet a HTML-adatokat fogja megjeleníteni a webszerveren.



#include
#include
#include
int fő ( ) {
int szerver_fd = socket ( AF_INET, SOCK_STREAM, 0 ) ;
ha ( szerver_fd == - 1 ) {
std::cerr << 'Socket létrehozása nem sikerült' ;
Visszatérés -1 ;
}
// más
// {
// std::cout << 'kijárat' ;
// }
// kötni
std::cout << 'http//:127.0.0.1:8080' ;
// A további kód itt található
Visszatérés 0 ;
}


Ennek a kódnak a kimenete az alábbiakban található:






Ez azt mutatja, hogy a socket sikeresen létrejött C++ nyelven a webszerverhez való csatlakozáshoz.

Webszerver kezelés C++ nyelven

A rendszer webszervere úgy van beállítva, hogy kezelje a különböző C++ fogalmakat, mint például az összevonási rendezés, a lineáris rendezés stb. Ne felejtse el inicializálni a fontos hálózati könyvtárakat. A webszerver a helyi gépen fut (127.0.0.1), és a 8080-as porton figyel.



Szerelje be a szükséges könyvtárakat a C++ programozási nyelvbe az alábbiak szerint:

# tartalmazza < lendületet / asio.hpp >


Ne feledje, hogy a webszerver létrehozása C++ nyelven nem egyszerű és időigényes folyamat. A bejövő kapcsolatokat az „async_accept” segítségével tudjuk kezelni.

Szerverválaszok a C++ kódban a webszerveren

A szerver válaszának HTTP-nek kell lennie, amely a böngészőben működik, és a kimenetet a weboldal HTML nézetében jeleníti meg. Az összes könyvtár kezeli a szervereket és kezeli az összes érvényes kérést.

A webszerver kötése és meghallgatása

Ezután tudnunk kell a webszerver kötéséről és figyeléséről, hogy könnyen végrehajthassuk a kódot a weboldalon. Ezt követően a socketet a rendszerünk megadott címéhez kell kötnünk, alapvetően ahhoz az IP címhez és porthoz, amelyen ezek a socketek aktívak. A porton elkezdjük figyelni a bejövő kapcsolatokat.

Inicializálnunk kell azt a néhány könyvtárat, amelyet össze kell kötni és összekapcsolni.

Sockaddr_in cím;


Összeköthetjük a szervert. Ha a szerver nem működik vagy nem csatlakozik, az üzenet nem jelenik meg egyetlen böngésző weboldalán sem.

A webszerverhez fűződő kapcsolatok elfogadása

Ebben a részben megtudjuk, hogyan tudjuk szabályozni az ügyfél kéréseinek áramlását. A szerver a HTTP protokollon keresztül minden ügyfélkérést elfogad. A szerver socket jelzi az üzenet méretét, amelyet a webszerver fogad az ügyféltől. Az üzenet egyértelműbben és egyedibben tartalmazza a szerver socket kapcsolatát és címét. Ellenőrizzük, hogy a kiszolgálónak válaszolnia kell-e, ha a felhasználói socket megtalálható vagy sem. Ha a felhasználói socket kapcsolat nem található, nem tudjuk elfogadni a kapcsolatot a webszerverrel.

Az adatok küldésének és fogadásának módjai a felhasználótól és a kiszolgálótól

A socket hivatkozások létrehozása és a kapcsolat elfogadása után a következő lépés az adatok szerver oldalra küldése és a szerverről történő adatvétel különböző kulcsszavak segítségével, valamint a C++-ban az adatok küldéséhez és fogadásához kapcsolódó funkciók felépítése. Itt ellenőrizzük az adatok válaszát. Ez a kérés az adatok lekérésére vagy az adatok POST-ra küldésére vonatkozik a webszerverről? Ellenőrizzük az ügyfél kérésének válaszállapotát. Ideiglenesen a pufferben tároljuk az összes klienskérést, hogy megjelenítsük az üzenetet vagy a kimenetet a webszerveren.

Lineáris rendezés C++ nyelven

Végezzük el itt a lineáris rendezést, és egyszerűen jelenítsük meg a lineáris rendezés eredményét a webszerveren. A lineáris rendezés kódrészlete az alábbiakban található:

#include
névtér használata std;
érvénytelen Lineáris keresés ( int arr [ ] , int len, int item ) {
számára ( int én = 0 ;én < len;i++ ) {
ha ( arr [ én ] == tétel ) {
cout << tétel << ' Az indexen található : ' << én;
Visszatérés ;
}
}
cout << 'Nem található' ;
}
int fő ( ) {
int arr [ ] = { 10 , 5 , tizenöt , huszonegy , - 3 , 7 } ;
int len ​​= sizeof ( arr ) / mérete ( arr [ 0 ] ) ;
int item = huszonegy ;
Lineáris Keresés ( arr, len, item ) ;
Visszatérés 0 ;
}


Ebben a példában a „21” elemre keresünk, amely indexnél. Tehát ezt a kódot futtatjuk. Ennek a kódnak a kimenete az alábbiakban található:


Ez a kimenet most meg van nyitva a webszerveren, mint bármely böngészőben, például Chrome, Edge stb.

Szüntesse meg az összes csatlakozást a kimeneti kijelző után

Ez az utolsó lépés az adatok webszerveren történő kezelésében. Ne felejtse el lezárni a csatlakozóaljzatokat a kívánt kimenet végrehajtása után. Itt bezárjuk a socketet a „close(server_id)” és a „close (kliens socket)” függvényekkel.

A szerver futtatásának végén a várt kimenet megjelenik a weboldalon a „http//localhost:8080” cím elérésével.

Következtetés

A cikk végén elmondhatjuk, hogy az egyszerű webszerver-kezelés C++-ban valóban bonyolult, és teljes koncentrációt igényel a HTTP-kliens kérésének elküldéséhez és fogadásához. Bővíthetjük a webszerver funkcionalitását, hogy a tartalmat dinamikusan jelenítsük meg a weboldalon. Remélhetőleg ez a cikk hasznos az Ön számára, és ezeket a példákat futtathatja a környezetében, hogy megértse azokat a lépéseket, amelyek szükségesek egy egyszerű webszerver C++ nyelven történő létrehozásához.