Seadistage pistikprogrammis Python Interneti-server

Võrgukliendi õpetuse täiendusena näitab see õpetus, kuidas rakendada lihtsat veebiserverit programmis Python. Kindlasti ei asenda see Apache'i ega Zope'i. Samuti on Pythonis olemas kindlamaid viise veebiteenuste rakendamiseks, kasutades selliseid mooduleid nagu BaseHTTPServer. See server kasutab ainult pistikupesa moodulit.

Meenutate, et pistikupesa moodul on enamiku Pythoni veebiteenuste moodulite selgroog. Nagu lihtsa võrgukliendi puhul, illustreerib serveri ehitamine selle abil Pytoni veebiteenuste põhitõdesid läbipaistvalt. BaseHTTPServer impordib serveri mõjutamiseks pistikupeamooduli.

Ülevaatena tehakse kõiki võrgutehinguid klientide ja serverite vahel. Enamikus protokollides küsivad kliendid kindlat aadressi ja saavad andmeid.

Igas aadressis võib töötada hulgaliselt servereid. Limiit on riistvaral. Piisava riistvaraga (RAM, protsessori kiirus jne) võib sama arvuti toimida veebiserverina, ftp-serverina ja meiliserver (pop, smtp, imap või kõik ülaltoodu) korraga. Iga teenus on seotud pordiga. Port on ühendatud pistikupesaga. Server kuulab sellega seotud pordi ja annab teavet, kui selle pordi kohta saabub taotlusi.

instagram viewer

Nii et võrguühenduse mõjutamiseks peate teadma hosti, porti ja selles pordis lubatud toiminguid. Enamik veebiservereid töötab pordil 80. Konfliktide vältimiseks installitud Apache-serveriga töötab meie veebiserver siiski pordil 8080. Konfliktide vältimiseks teiste teenustega on kõige parem hoida HTTP-teenused pordil 80 või 8080. Need on kaks kõige tavalisemat. Ilmselt peab nende kasutamisel leidma avatud pordi ja hoiatama kasutajaid muudatustest.

Nagu võrgukliendi puhul, peaksite arvestama, et need aadressid on erinevate teenuste ühised pordinumbrid. Kuni klient küsib õiget teenust õigel pordil õigel aadressil, toimub suhtlus ikkagi. Google'i oma Näiteks e-posti teenus ei töötanud algselt ühistel pordi numbritel, kuid kuna nad teavad, kuidas oma kontodele juurde pääseda, saavad kasutajad siiski oma e-kirjad kätte.

Erinevalt võrgukliendist on kõik serveris olevad muutujad juhtmega. Ükski teenus, mida eeldatakse pidevalt töötavat, ei tohiks oma sisemise loogika muutujaid käsureale seada. Ainus erinevus selles oleks siis, kui soovite mingil põhjusel, et teenus käiks aeg-ajalt ja erinevatel pordinumbritel. Kui see aga nii oleks, saate siiski süsteemi aega vaadata ja köiteid vastavalt muuta.

Nagu juba mainitud, peab server teadma hosti, kellega ta seotakse, ja porti, kus seda kuulata. Meie eesmärkidel kehtib teenus mis tahes hostinime suhtes.

Nagu varem mainitud, saab see sadam olema 8080. Pange tähele, et kui kasutate seda serverit koos võrgukliendiga, peate muutma selles pordi numbrit programmi.

Kas taotleda teavet või seda kätte saada, et pääseda juurde Internet, peame looma pistikupesa. Selle kõne süntaks on järgmine:

Kaks esimest on ilmselgelt Interneti-protokollid. Nendes peredes on juurdepääs kõigile, mis reisivad Interneti kaudu. Paljud võrgud ei tööta endiselt IPv6-ga. Seega, kui te ei tea teisiti, on kõige kindlam vaikimisi IPv4 kasutada ja kasutada AF_INET.

Ülekaalukalt on kõige levinumad tüübid SOCK_STEAM ja SOCK_DGRAM, kuna nad töötavad IP-komplekti kahes protokollis (TCP ja UDP). Viimased kolm on palju haruldasemad ja seetõttu ei pruugi neid alati toetada.

Pärast pistikupesa loomist peame seejärel määrama pistikupesa valikud. Mis tahes pistikupesaobjekti jaoks saate pistikupesa suvandid määrata, kasutades meetodit setsockopt (). Süntaks on järgmine:

Kui tahame serverile helistajale tagasisidet anda, võiksime nüüd sisestada prindikäsu, et kinnitada, et server töötab ja töötab.

Pärast serveri seadistamist peame nüüd seda ütlema Python mida teha, kui antud sadamas on taotlus esitatud. Selleks viidame päringule selle väärtuse järgi ja kasutame seda püsiva, samas silmuse argumendina.

Kui päring on esitatud, peaks server selle päringu heaks kiitma ja looma faili objekti, et sellega suhelda.

Sel juhul kasutab server lugemiseks ja kirjutamiseks sama porti. Seetõttu antakse makefile'i meetodile argument “rw”. Puhvri suuruse null pikkus jätab faili selle osa lihtsalt dünaamiliseks määramiseks.

Järgmine samm on failiobjekti sisendi lugemine, kui me ei soovi luua ühetoimelist serverit. Kui me seda teeme, peaksime olema ettevaatlikud, et eraldada see liigne tühimik.

Taotlus esitatakse toimingu vormis, millele järgneb leht, protokoll ja kasutatava protokolli versioon. Kui soovite veebilehte teenindada, jaotatakse see sisend soovitud lehe saamiseks ja loetakse see leht muutujaks, mis kirjutatakse seejärel pistikupesa failiobjekti. Funktsiooni faili lugemiseks sõnastikku leiate ajaveebist.

Et seda õpetust natuke paremini illustreerida, mida pistikupeamooduliga teha saab, loobume sellest serveri osast ja näitame selle asemel, kuidas saab andmete esitamist nüansseerida. Sisestage järgmised mitu rida programmi.

Kui mõni saadab veebilehte, on esimene rida tore viis andmete tutvustamiseks veebibrauseriga. Kui see välja jätta, muudab enamik veebibrausereid renderdamise vaikimisi HTML. Kui see aga sisaldub, peab sellele järgnema „OK” kaks uued rea märgid. Neid kasutatakse protokolliteabe eristamiseks lehe sisust.

Nagu võib arvata, on esimese rea süntaksiks protokoll, protokolli versioon, sõnumi number ja olek. Kui olete kunagi käinud kolinud veebilehel, olete tõenäoliselt saanud tõrke 404. Siinne 200 teade on lihtsalt jaatav sõnum.

Ülejäänud väljund on lihtsalt mitme rea peale jaotatud veebileht. Pange tähele, et serverit saab programmeerida väljundis kasutaja andmete kasutamiseks. Viimane rida kajastab veebipäringut serveri poolt vastu võetud kujul.

Lõpuks peame päringu sulgemisaktidena sulgema failiobjekti ja serveri pesa.

Salvestage see programm nüüd äratuntava nime alla. Kui olete sellele kutsunud numbriga „python program_name.py” ja peaksite teenuse käivitamiseks kinnitama teate, peaks see ekraanile printima. Seejärel tundub, et terminal teeb pausi. Kõik on nii nagu peab. Avage oma veebibrauser ja minge aadressile localhost: 8080. Seejärel peaksite nägema meie antud käskude väljundit. Pange tähele, et ruumi huvides ei rakendanud ma selles programmis tõrkekäsitlust. Kuid iga "loodusesse" lastav programm peaks seda tegema.