Ta vadnica kot dopolnilo k vadnici za omrežne odjemalce prikazuje, kako implementirati preprost spletni strežnik v Python. Zagotovo pa to ne more nadomestiti Apache ali Zope. Obstajajo tudi močnejši načini za izvajanje spletnih storitev v Pythonu z uporabo modulov, kot je BaseHTTPServer. Ta strežnik uporablja izključno modul socket.
Spomnili se boste, da je modul vtičnice hrbtenica večine modulov spletnih storitev Python. Kot pri preprostem omrežnem odjemalcu tudi gradnja strežnika z njim nazorno prikazuje osnove spletnih storitev v Pythonu. BaseHTTPServer sam uvozi modul vtičnice, da vpliva na strežnik.
Kot pregled se vse omrežne transakcije zgodijo med strankami in strežniki. V večini protokolov stranke vprašajo določen naslov in prejmejo podatke.
Znotraj vsakega naslova lahko deluje množica strežnikov. Omejitev je v strojni opremi. Z zadostno strojno opremo (RAM, hitrost procesorja itd.) Lahko isti računalnik služi kot spletni strežnik, ftp strežnik in poštni strežnik (pop, smtp, imap ali vse zgoraj našteto) vse hkrati. Vsaka storitev je povezana s pristaniščem. Pristanišče je vezano na vtičnico. Strežnik posluša povezana vrata in poda informacije o prejemu zahtev na tem pristanišču.
Če želite vplivati na omrežno povezavo, morate poznati gostitelja, vrata in dejanja, dovoljena na tem pristanišču. Večina spletnih strežnikov deluje na vrata 80. Da pa se izognemo konfliktu z nameščenim strežnikom Apache, bo naš spletni strežnik deloval na vratih 8080. Da bi se izognili konfliktu z drugimi storitvami, je najbolje, da storitve HTTP obdržite na vratih 80 ali 8080. To sta najpogostejši dve. Če se ti uporabljajo, morate najti odprto vrata in uporabnike opozoriti na spremembo.
Tako kot pri omrežnem odjemalcu morate upoštevati, da so ti naslovi skupne številke vrat za različne storitve. Dokler odjemalec zahteva pravilen servis na pravem pristanišču na pravem naslovu, bo komunikacija še vedno potekala. Googlovih Poštna storitev na primer sprva ni delovala na skupnih številkah vrat, ampak ker vedo, kako dostopati do svojih računov, lahko uporabniki še vedno dobijo svojo pošto.
Za razliko od omrežnega odjemalca so vse spremenljivke v strežniku trde. Vsaka storitev, za katero se pričakuje, da se bo nenehno izvajala, ne sme imeti spremenljivk svoje notranje logike v ukazni vrstici. Edina sprememba tega bi bila, če bi iz nekega razloga želeli, da se storitev občasno izvaja in na različnih številkah vrat. Če bi bilo tako, pa bi še vedno lahko gledali sistemski čas in ustrezno spreminjali vezi.
Kot smo že omenili, mora strežnik poznati gostitelja, na katerega mora biti povezan, in vrata, na katerih bo poslušal. Za naše namene bo storitev sploh veljala za katero koli ime gostitelja.
Kot je bilo že omenjeno, bo pristanišče 8080. Upoštevajte, da boste morali, če ta strežnik uporabljate v povezavi z omrežnim odjemalcem, spremeniti številko vrat, uporabljeno v tem program.
Ali želite zahtevati informacije ali jih vročiti, da bi dostopali do Internet, moramo ustvariti vtičnico. Sintaksa tega klica je naslednja:
Prva dva sta očitno internetna protokola. Vse, kar potuje po internetu, je dostopno v teh družinah. Mnoga omrežja še vedno ne delujejo na IPv6. Če ne veste drugače, je najvarneje privzeti IPv4 in uporabljati AF_INET.
Daleč najpogostejši tipi sta SOCK_STEAM in SOCK_DGRAM, ker delujeta v dveh protokolih IP paketa (TCP in UDP). Slednji trije so precej redkejši in zato morda ne bodo vedno podprti.
Po ustvarjanju vtičnice moramo nato nastaviti možnosti vtičnice. Za kateri koli objekt vtičnice lahko nastavite možnosti vtičnice z uporabo metode setsockopt (). Skladnja je naslednja:
Če želimo posredovati povratne informacije osebi, ki pokliče strežnik, lahko zdaj vnesemo ukaz za tiskanje in potrdimo, da strežnik deluje in deluje.
Po nastavitvi strežnika moramo zdaj povedati Python kaj storiti, ko je na določenem pristanišču zahteva. Za to sklicujemo zahtevo po njeni vrednosti in jo uporabljamo kot argument vztrajne zanke.
Ko je zahteva vložena, mora strežnik sprejeti zahtevo in ustvariti datotečni objekt za interakcijo z njo.
V tem primeru strežnik uporablja enaka vrata za branje in pisanje. Zato je metoda makefile dana argument 'rw'. Nič dolžina velikosti medpomnilnika preprosto zapusti ta del datoteke, da se določi dinamično.
Če ne želimo ustvariti enosmernega strežnika, je naslednji korak branje vnosa iz datotečnega predmeta. Ko to storimo, moramo biti previdni, da odvzamemo ta vložek odvečnega prostora.
Zahteva bo potekala v obliki dejanja, nato stran, protokol in različica uporabljenega protokola. Če želite obiskati spletno stran, si ta vhod razdeli, da prikliče zahtevano stran, nato pa to stran prebere v spremenljivko, ki se nato zapiše v datoteko objekta vtičnice. Funkcijo za branje datoteke v slovar najdete na spletnem dnevniku.
Da bi ta vadnica nekoliko bolj nazorno pokazala, kaj lahko naredimo z modulom vtičnice, se bomo odpovedali temu delu strežnika in namesto tega pokazali, kako lahko niansiramo predstavitev podatkov. Naslednjih nekaj vrstic vnesite v program.
Če nekdo pošilja spletno stran, je prva vrstica lep način za vnašanje podatkov v spletni brskalnik. Če je izpuščeno, bo večina spletnih brskalnikov privzeto prikazala HTML. Če je ena vključena, ji mora slediti "V redu" dva novi vrstici. Te se uporabljajo za razlikovanje protokolarnih informacij od vsebine strani.
Skladnja prve vrstice, kot verjetno verjetno domnevate, je protokol, različica protokola, številka sporočila in status. Če ste že kdaj obiskali spletno stran, ki se je premaknila, ste verjetno prejeli napako 404. Tukaj je sporočilo 200 preprosto pritrdilno.
Preostanek izida je preprosto spletna stran, razčlenjena na več vrstic. Opazili boste, da je strežnik lahko programiran tako, da uporablja uporabniške podatke v izhodu. Končna vrstica odraža spletno zahtevo, kakršno je prejel strežnik.
Končno moramo kot zaključna dejanja zahteve zapreti datotečni objekt in strežniško vtičnico.
Sedaj shranite ta program pod prepoznavnim imenom. Ko ga pokličete s tipko "python program_name.py", če ste programirali sporočilo za potrditev izvajanja storitve, se mora to natisniti na zaslon. Zdi se, da bo terminal nato zaustavil. Vse je tako, kot mora biti. Odprite spletni brskalnik in pojdite na localhost: 8080. Nato bi morali videti izhod pisnih ukazov, ki smo jih dali. Upoštevajte, da zaradi prostora v tem programu nisem izvedel ravnanja z napakami. Vendar bi moral vsak program, ki se sprosti v divjino, bi moral.