Ako doplnok k tutoriálu sieťových klientov tento tutoriál ukazuje, ako implementovať jednoduchý webový server v systéme Windows krajta. Toto nie je náhrada za Apache alebo Zope. Existujú tiež robustnejšie spôsoby implementácie webových služieb v Pythone pomocou modulov ako BaseHTTPServer. Tento server používa výhradne soketový modul.
Spomeniete si, že soketový modul je chrbticou väčšiny webových modulov Python. Rovnako ako v prípade jednoduchého sieťového klienta, aj výstavba servera s ním transparentne ilustruje základy webových služieb v Pythone. Samotný BaseHTTPServer importuje soketový modul, aby ovplyvnil server.
Na kontrolu sa všetky sieťové transakcie uskutočňujú medzi klientmi a servermi. Vo väčšine protokolov sa klienti pýtajú na určitú adresu a prijímajú údaje.
Na každej adrese môže bežať množstvo serverov. Limit je v hardvéri. S dostatočným hardvérom (RAM, rýchlosť procesora atď.) Môže ten istý počítač slúžiť ako webový server, ftp server a poštový server (pop, smtp, imap alebo všetky vyššie uvedené položky) naraz. Každá služba je priradená k portu. Port je viazaný na soket. Server počúva svoj pridružený port a poskytuje informácie o prijatí žiadostí o tento port.
Aby ste ovplyvnili sieťové pripojenie, musíte poznať hostiteľa, port a akcie povolené na tomto porte. Väčšina webových serverov beží na porte 80. Aby sme sa však vyhli konfliktu s nainštalovaným serverom Apache, náš webový server bude bežať na porte 8080. Aby sa predišlo konfliktom s inými službami, je najlepšie ponechať služby HTTP na porte 80 alebo 8080. Toto sú dva najbežnejšie prípady. Ak sa používajú, musíte samozrejme nájsť otvorený port a upozorniť používateľov na zmenu.
Rovnako ako v prípade sieťového klienta by ste si mali uvedomiť, že tieto adresy sú spoločné čísla portov pre rôzne služby. Pokiaľ klient požiada o správnu službu na správnom porte na správnej adrese, komunikácia bude naďalej prebiehať. Google je Napríklad poštová služba sa pôvodne nespúšťala na bežných číslach portov, ale pretože vedia, ako majú prístup k svojim účtom, používatelia môžu stále získať svoju poštu.
Na rozdiel od sieťového klienta sú všetky premenné na serveri pevne zapojené. Každá služba, ktorá sa má spustiť nepretržite, by nemala mať na príkazovom riadku nastavené premenné svojej vnútornej logiky. Jedinou zmenou by bolo, že z nejakého dôvodu ste chceli, aby sa služba spúšťala príležitostne a na rôznych číslach portov. Ak by tomu tak bolo, stále by ste mohli sledovať systémový čas a zodpovedajúcim spôsobom meniť väzby.
Ako už bolo spomenuté, server musí poznať hostiteľa, s ktorým má byť spojený, a port, na ktorom má počúvať. Na naše účely sa služba bude vzťahovať na akékoľvek meno hostiteľa.
Prístav, ako už bolo spomenuté, bude 8080. Upozorňujeme, že ak tento server používate v spojení so sieťovým klientom, budete musieť zmeniť číslo portu, ktoré sa v ňom používa program.
Či už si chcete vyžiadať informácie, alebo im slúžiť, aby ste mali prístup k internetu? internet, musíme si vytvoriť zásuvku. Syntax tohto hovoru je nasledovná:
Prvé dva sú samozrejme internetové protokoly. V týchto rodinách je prístup k všetkému, čo cestuje cez internet. Mnoho sietí stále nefunguje na IPv6. Takže, ak viete niečo iné, je najbezpečnejšie predvoliť IPv4 a používať AF_INET.
Najbežnejšie typy sú SOCK_STEAM a SOCK_DGRAM, pretože fungujú na dvoch protokoloch sady IP (TCP a UDP). Posledné tri sú omnoho vzácnejšie, a preto nemusia byť vždy podporované.
Po vytvorení soketu musíme potom nastaviť možnosti soketu. Pre akýkoľvek objekt soketu môžete nastaviť možnosti soketu pomocou metódy setsockopt (). Syntax je nasledovná:
Ak chceme dať spätnú väzbu osobe, ktorá volá server, mohli by sme teraz zadať príkaz print, aby sme potvrdili, že server je funkčný.
Po nastavení servera musíme teraz povedať krajta čo robiť, keď sa v danom prístave podá žiadosť. Za týmto účelom odkazujeme na požiadavku na jej hodnotu a používame ju ako argument perzistentnej slučky while.
Po zadaní požiadavky by server mal prijať požiadavku a vytvoriť objekt súboru, ktorý s ňou bude pracovať.
V tomto prípade server používa rovnaký port na čítanie a zápis. Preto je metóde makefile uvedený argument „rw“. Nulová dĺžka veľkosti vyrovnávacej pamäte jednoducho ponecháva tú časť súboru, ktorá sa má určiť dynamicky.
Pokiaľ nechceme vytvoriť server s jednou činnosťou, ďalším krokom je prečítanie vstupu zo súboru objektu. Keď to urobíme, mali by sme byť opatrní, aby sme odstránili tento nadmerný biely priestor.
Žiadosť bude mať formu akcie, po ktorej bude nasledovať stránka, protokol a použitá verzia protokolu. Ak chce niekto obsluhovať webovú stránku, rozdeľuje tento vstup, aby získal požadovanú stránku, a potom túto stránku prečíta do premennej, ktorá sa potom zapíše do objektu súboru soketu. V blogu nájdete funkciu na čítanie súboru do slovníka.
Aby bol tento tutoriál trochu ilustratívnejší, čo sa dá urobiť so soketovým modulom, vzdáme sa tejto časti servera a namiesto toho ukážeme, ako je možné nuansovať prezentáciu údajov. Zadajte ďalších niekoľko riadkov do program.
Ak niekto odosiela webovú stránku, prvý riadok je príjemným spôsobom, ako do webového prehľadávača vložiť údaje. Ak je táto voľba vynechaná, väčšina webových prehliadačov bude predvolene vykresľovaná HTML. Ak ho však niekto zahrnie, za ním musí nasledovať „OK“ dva nové riadkové znaky. Používajú sa na odlíšenie informácií o protokole od obsahu stránky.
Syntax prvého riadku, ako pravdepodobne viete, je protokol, verzia protokolu, číslo správy a stav. Ak ste niekedy navštívili webovú stránku, ktorá sa presunula, pravdepodobne ste dostali chybu 404. Správa 200 je jednoducho kladná správa.
Zvyšok výstupu je jednoducho webová stránka rozdelená na niekoľko riadkov. Všimnite si, že server môže byť naprogramovaný na používanie užívateľských dát vo výstupe. Posledný riadok odráža webovú požiadavku tak, ako bola prijatá serverom.
Nakoniec, ako záverečné akty žiadosti, musíme zatvoriť objekt súboru a soket servera.
Teraz uložte tento program pod rozpoznateľným názvom. Ak ste program zavolali pomocou príkazu „python program_name.py“ a ak ste naprogramovali správu na potvrdenie spustenia služby, malo by sa to vytlačiť na obrazovku. Zdá sa, že sa terminál zastavil. Všetko je také, aké by malo byť. Otvorte webový prehľadávač a prejdite na localhost: 8080. Potom by ste mali vidieť výstup príkazov na zápis, ktoré sme dali. Vezmite prosím na vedomie, že kvôli tomuto priestoru som v tomto programe nevykonával spracovanie chýb. Akýkoľvek program prepustený do „divočiny“ by mal.