A hálózati kliens oktatóanyagának kiegészítéseként ez az oktatóanyag bemutatja, hogyan lehet egy egyszerű webszervert bevezetni a Piton. Az biztos, hogy ez nem helyettesíti az Apache-t vagy a Zope-t. Vannak még robosztusabb módok is a webszolgáltatások Pythonban történő megvalósításához, olyan modulok segítségével, mint a BaseHTTPServer. Ez a szerver kizárólag a socket modult használja.
Emlékeztetni kell arra, hogy a socket modul a legtöbb Python webszolgáltatási modul gerince. Mint az egyszerű hálózati kliensnél is, egy kiszolgáló felépítése ezzel átlátható módon szemlélteti a Python webszolgáltatásainak alapjait. A BaseHTTPServer maga importálja a foglalat modult a szerver befolyásolására.
Felülvizsgálatként az összes hálózati tranzakció az ügyfelek és a kiszolgálók között történik. A legtöbb protokollban az ügyfelek egy bizonyos címet kérnek és adatokat kapnak.
Minden címen belül sok szerver futhat. A korlátozás a hardverben van. Megfelelő hardver (RAM, processzor sebesség stb.) Mellett ugyanaz a számítógép szolgálhat webszerverként, ftp szerverként és
levelező szerver (pop, smtp, imap vagy a fentiek mindegyike) egyszerre. Minden szolgáltatás porthoz van társítva. A port egy aljzathoz van kötve. A szerver meghallgatja a hozzá tartozó portot, és információkat ad, amikor a porton kérések érkeznek.Tehát a hálózati kapcsolat befolyásolása érdekében meg kell ismernie a gazdagépet, a portot és az ezen a porton engedélyezett műveleteket. A legtöbb webszerver a 80-as porton fut. Annak érdekében, hogy ne kerüljön konfliktus a telepített Apache szerverrel, webszerverünk a 8080-as porton fog futni. A többi szolgáltatással való ütközés elkerülése érdekében a legjobb, ha a HTTP-szolgáltatásokat a 80-as vagy a 8080-as porton tartja. Ez a két leggyakoribb. Nyilvánvaló, hogy ha ezeket használják, akkor meg kell találni egy nyitott portot, és figyelmeztetnie kell a felhasználókat a változásra.
Mint a hálózati kliensnél is, meg kell jegyezni, hogy ezek a címek a különböző szolgáltatások általános portszáma. Mindaddig, amíg az ügyfél a helyes kiszolgálást kéri a megfelelő porton, a megfelelő címen, a kommunikáció továbbra is megtörténik. Google Például a levelezőszolgálat eredetileg nem a közös portszámokon működött, de mivel tudják, hogyan kell hozzáférni a fiókokhoz, a felhasználók továbbra is megkaphatják a leveleiket.
A hálózati klienstől eltérően a kiszolgálón minden változó vezetékes. Bármely szolgáltatásnak, amely várhatóan folyamatosan működik, nem szabad a belső logikájának változóit beállítani a parancssorba. Ennek egyetlen változata az lenne, ha valamilyen okból azt akarja, hogy a szolgáltatás alkalmanként és különféle portszámokon futjon. Ha ez lenne a helyzet, akkor is megfigyelheti a rendszeridőt, és ennek megfelelően megváltoztathatja a kötéseket.
Mint már említettük, a szervernek tudnia kell a gazdagépet, amelyhez társítani kell, és azt a portot, amelyen hallgatni kell. Céljaink szerint a szolgáltatást minden gazdagépnevre vonatkozni kell.
A kikötő, ahogy korábban említettük, 8080 lesz. Tehát vegye figyelembe, hogy ha ezt a kiszolgálót a hálózati klienssel együtt használja, akkor meg kell változtatnia az abban használt portszámot program.
Információ kérése vagy kiszolgálása annak elérése érdekében Internet, létre kell hoznunk egy aljzatot. A hívás szintaxisa a következő:
Az első kettő nyilvánvalóan internetes protokollok. Bármi, ami az interneten keresztül utazik, elérhető ezekben a családokban. Sok hálózat továbbra sem működik az IPv6-on. Tehát, ha nem tud másképp, akkor a legbiztonságosabb az IPv4 alapértelmezett beállítása és az AF_INET használata.
Messze a leggyakoribb típusok a SOCK_STEAM és SOCK_DGRAM, mivel az IP csomag két protokollján (TCP és UDP) működnek. Az utóbbi három sokkal ritkább, ezért nem mindig támogatott.
A socket létrehozása után be kell állítanunk a socket opciókat. Bármely socket objektumhoz beállíthatja a socket opciókat a setsockopt () módszer használatával. A szintaxis a következő:
Ha visszajelzést szeretnénk adni annak a személynek, aki felhívja a kiszolgálót, akkor beírhatunk egy nyomtatási parancsot annak megerősítésére, hogy a kiszolgáló működik és működik.
A kiszolgáló beállítása után meg kell mondanunk Piton mit kell tenni, ha az adott porton kérelem érkezik. Ehhez hivatkozunk a kérésre annak értékénél, és egy állandó, miközben hurok argumentumaként használjuk.
Amikor egy kérést készítenek, a szervernek el kell fogadnia a kérést, és létre kell hoznia egy fájlobjektumot, hogy vele kapcsolatba léphessen.
Ebben az esetben a szerver ugyanazt a portot használja az olvasáshoz és az íráshoz. Ezért a makefile módszer kap egy „rw” érvet. A pufferméret null hossza egyszerűen hagyja a fájl azon részét, amelyet dinamikusan meg kell határozni.
Ha nem akarunk létrehozni egy-műveletű kiszolgálót, a következő lépés az, hogy beolvassa a fájlobjektumból származó bemeneteket. Amikor ezt megtesszük, vigyáznunk kell a felesleges szóköz bevitelére.
A kérés cselekvés formájában érkezik, amelyet egy oldal, a protokoll és a használt protokoll verziója követ. Ha egy weblapot akar kiszolgálni, akkor ezt a bemenetet felosztja, hogy letöltse a kért oldalt, majd az oldalt egy változóba olvassa, amelyet azután a socket fájl objektumba ír. A blog szótárba való beolvasásának funkciója megtalálható a blogban.
Annak érdekében, hogy ez az oktatóprogram kissé szemléltesse, hogy mit lehet csinálni a socket modullal, akkor elhagyjuk a szervernek ezt a részét, ehelyett megmutatjuk, hogyan lehet árnyalni az adatok megjelenítését. Írja be a következő néhány sort a program.
Ha egy weblapot küld, az első sor egy jó módszer az adatok webböngészőhöz történő bevezetésére. Ha kihagyja, akkor a legtöbb böngésző alapértelmezés szerint megjeleníti a megjelenítést HTML. Ha azonban benne van, akkor az „OK” -ot kell követnie két új sor karakterek. Ezeket használják a protokollinformáció megkülönböztetésére az oldal tartalmától.
Az első sor szintaxisa, amint valószínűleg feltehetjük, a protokoll, a protokoll verziója, az üzenet száma és az állapota. Ha valaha is meglátogatott egy meglátogatott weboldalt, valószínűleg 404-es hibát kapott. A 200 üzenet itt egyszerűen igenlő üzenet.
A kimenet többi része egyszerűen több oldalra felbontott weboldal. Megjegyezzük, hogy a kiszolgáló beprogramozható a felhasználói adatok felhasználására a kimeneten. A végső sor a webes kérést tükrözi, amint azt a szerver megkapta.
Végül, a kérelem záró aktusaként be kell zárni a fájlobjektumot és a kiszolgálóaljzatot.
Most mentse el ezt a programot egy felismerhető név alatt. Miután felhívta a 'python program_name.py' címre, és ha üzenetet programozott a szolgáltatás futtatásának megerősítésére, ennek a képernyőre kell nyomódnia. Úgy tűnik, hogy a terminál megáll. Mindennek úgy kell lennie. Nyissa meg a böngészőt, és lépjen a localhost telefonszámra: 8080. Ezután látnia kell az általunk adott írási parancsok kimenetét. Felhívjuk figyelmét, hogy helyet igénybe véve nem végeztem el a hibakezelést ebben a programban. Minden, a „vadba” kiadott programnak azonban meg kell felelnie.