Postavljanje internetskog poslužitelja u Pythonu pomoću Socket-a

Kao dodatak vodiču za mrežne klijente, ovaj vodič prikazuje kako implementirati jednostavan web poslužitelj u Piton. Da budemo sigurni, ovo nije zamjena za Apache ili Zope. Postoje i snažniji načini implementacije web usluga na Python, pomoću modula poput BaseHTTPServer. Ovaj poslužitelj isključivo koristi modul socket.

Sjetit ćete se da je utičnički modul okosnica većine Python modula web usluga. Kao i kod jednostavnog mrežnog klijenta, izgradnja poslužitelja s njim ilustrira osnove web usluga na Pythonu. BaseHTTPServer uvozi socket modul kako bi utjecao na poslužitelj.

Pregledom, sve mrežne transakcije odvijaju se između klijenata i poslužitelja. U većini protokola klijenti pitaju određenu adresu i primaju podatke.

Unutar svake adrese može se pokrenuti mnoštvo poslužitelja. Ograničenje je u hardveru. Uz dovoljno hardvera (RAM, brzina procesora itd.), Isto računalo može poslužiti kao web poslužitelj, ftp poslužitelj i poslužitelja pošte (pop, smtp, imap ili sve gore navedeno) sve istovremeno. Svaka je usluga povezana s priključkom. Priključak je vezan u utičnicu. Poslužitelj sluša pridruženi port i daje informacije kada se na taj priključak primi zahtjev.

instagram viewer

Dakle, da biste utjecali na mrežnu vezu, morate znati domaćina, priključak i radnje dopuštene na tom priključku. Većina web poslužitelja radi na porta 80. Međutim, da ne bi došlo do sukoba s instaliranim Apache serverom, naš web poslužitelj pokrenut će se na priključku 8080. Da biste izbjegli sukob s drugim uslugama, najbolje je HTTP usluge držati na luci 80 ili 8080. To su dva najčešća. Očito, ako se koriste, morate pronaći otvoren ulaz i upozoriti korisnike na promjenu.

Kao i kod mrežnog klijenta, trebate imati na umu da su ove adrese uobičajeni brojevi priključaka za različite usluge. Sve dok klijent zatraži ispravnu uslugu na pravom priključku na pravoj adresi, komunikacija će se i dalje odvijati. Googleov Usluga pošte, na primjer, u početku se nije pokretala na uobičajenim brojevima vrata, ali, zato što znaju pristupiti svojim računima, korisnici i dalje mogu primiti poštu.

Za razliku od mrežnog klijenta, sve su varijable na poslužitelju žičane. Svaka usluga koja se očekuje da se stalno izvodi ne bi trebala imati varijable svoje interne logike postavljene u naredbenom retku. Jedina varijacija u tome bila bi ako ste, iz nekog razloga, željeli da se usluga povremeno pokreće i na raznim brojevima porta. Ako je to slučaj, ipak biste mogli gledati vrijeme sustava i u skladu s time mijenjati veze.

Kao što je već spomenuto, poslužitelj mora znati domaćina kojem će se pridružiti i vrata na kojima treba slušati. Za naše potrebe imat ćemo da se usluga uopće odnosi na bilo koje ime domaćina.

Luka, kao što je ranije spomenuto, bit će 8080. Stoga imajte na umu da, ako taj poslužitelj koristite zajedno s mrežnim klijentom, morat ćete promijeniti broj porta koji se koristi u tom program.

Bilo da želite zatražiti informaciju ili da biste je poslužili, kako biste imali pristup Internet, moramo stvoriti utičnicu. Sintaksa ovog poziva je sljedeća:

Prva dva su očito internetski protokoli. Sve što putuje putem interneta može se pristupiti u tim obiteljima. Mnoge mreže i dalje ne rade na IPv6. Dakle, ako ne znate drugačije, najsigurnije je zadati IPv4 i koristiti AF_INET.

Daleko su najčešći tipovi SOCK_STEAM i SOCK_DGRAM jer djeluju na dva protokola IP skupa (TCP i UDP). Potonja su trojica mnogo rjeđa i možda ih nije moguće uvijek podržati.

Nakon stvaranja utičnice, tada moramo postaviti mogućnosti utičnice. Za bilo koji objekt utičnice možete postaviti mogućnosti utičnice pomoću metode setsockopt (). Sintaksa je sljedeća:

Ako želimo dati povratnu informaciju osobi koja zove poslužitelj, sada bismo mogli unijeti naredbu za ispis da potvrdimo da je poslužitelj pokrenut i pokrenut.

Nakon postavljanja poslužitelja, sada moramo reći Piton što učiniti kad se na danoj luci postavi zahtjev. Za ovo navodimo zahtjev po njegovoj vrijednosti i koristimo ga kao argument upornog petlje.

Kad je zahtjev upućen, poslužitelj bi trebao prihvatiti zahtjev i stvoriti objekt datoteke za interakciju s njim.

U tom slučaju poslužitelj koristi isti port za čitanje i pisanje. Stoga, makefile metodi dobiva argument 'rw'. Nulta dužina veličine međuspremnika jednostavno ostavlja taj dio datoteke da se dinamički određuje.

Ako ne želimo stvoriti poslužitelj s jednom radnjom, sljedeći je korak čitanje unosa iz datoteke datoteke. Kad to učinimo, trebali bismo biti oprezni kako bismo uklonili taj ulaz viška razmaka.

Zahtjev će doći u obliku radnje, nakon čega slijedi stranica, protokol i inačica protokola koji se koristi. Ako želite posluživati ​​web stranicu, dijeli ovaj ulaz da bi dohvatio traženu stranicu, a zatim tu stranicu čita u varijablu koja se zatim upisuje u objekt datoteke datoteke socket. Na blogu se može naći funkcija za čitanje datoteke u rječnik.

Da bismo ovaj vodič učinili malo ilustrativnijim što se može učiniti sa socket modulom, odustat ćemo od tog dijela poslužitelja i umjesto toga pokazati kako se može nijansirati prezentacija podataka. Sljedećih nekoliko redaka unesite u polje program.

Ako jedan šalje web stranicu, prvi je redak lijep način uvođenja podataka u web preglednik. Ako se izostavi, većina web preglednika zadat će prikazivanje HTML. No, ako ga jedan sadrži, nakon njega mora upisati „U redu“ dva novi likovi. Oni se koriste za razlikovanje podataka protokola od sadržaja stranice.

Sintaksa prvog retka, kao što vjerojatno pretpostavljate, je protokol, verzija protokola, broj poruke i status. Ako ste ikada otišli na premještenu web stranicu, vjerojatno ste dobili pogrešku 404. Ovdje poruka 200 jednostavno je pozitivna poruka.

Ostatak rezultata je jednostavno web stranica podijeljena na nekoliko redaka. Primijetit ćete da se poslužitelj može programirati za upotrebu korisničkih podataka u izlazu. Završni redak odražava web zahtjev onako kako ga je primio poslužitelj.

Konačno, kao zaključna djela zahtjeva, moramo zatvoriti objekt datoteke i utičnicu poslužitelja.

Sada ovaj program spremite pod prepoznatljivim imenom. Nakon što ga nazovete s 'python program_name.py', ako ste programirali poruku za potvrdu da je usluga pokrenuta, to bi se trebalo ispisati na ekranu. Čini se da će se terminal tada zaustaviti. Sve je kako treba biti. Otvorite web preglednik i idite na localhost: 8080. Tada biste trebali vidjeti izlaz naredbi za pisanje koje smo dali. Napominjemo da, zbog prostora, nisam implementirao rukovanje pogreškama u ovom programu. Međutim, svaki program objavljen u "divljini" trebao bi.