Konfigurer en Internet-server i Python ved hjælp af socket

click fraud protection

Som et supplement til netværksklientvejledningen viser denne tutorial, hvordan man implementerer en simpel webserver i Python. Dette er ingen erstatning for Apache eller Zope. Der er også mere robuste måder at implementere webtjenester i Python ved hjælp af moduler som BaseHTTPServer. Denne server bruger eksklusivt socket-modulet.

Du husker, at socketmodulet er rygraden i de fleste Python-webservicemoduler. Som med den enkle netværksklient illustrerer det at basere webservices i Python gennemsigtigt at opbygge en server med det. BaseHTTPServer importerer selv socketmodulet for at påvirke en server.

Som gennemgang sker alle netværkstransaktioner mellem klienter og servere. I de fleste protokoller spørger klienterne en bestemt adresse og modtager data.

Inden for hver adresse kan et antal servere køre. Begrænsningen er i hardware. Med tilstrækkelig hardware (RAM, processorhastighed osv.) Kan den samme computer fungere som en webserver, en ftp-server og mailserver (pop, smtp, imap eller alt det ovenstående) alt på samme tid. Hver service er knyttet til en port. Porten er bundet til en stikkontakt. Serveren lytter til den tilknyttede port og giver information, når der modtages anmodninger på den port.

instagram viewer

Så for at påvirke en netværksforbindelse skal du kende værten, porten og de handlinger, der er tilladt på den port. De fleste webservere kører på port 80. For at undgå konflikt med en installeret Apache-server kører vores webserver imidlertid på port 8080. For at undgå konflikt med andre tjenester er det bedst at opbevare HTTP-tjenester i port 80 eller 8080. Disse er de to mest almindelige. Selvfølgelig, hvis disse bruges, skal du finde en åben port og advare brugere om ændringen.

Som med netværksklienten skal du bemærke, at disse adresser er de fælles portnumre for de forskellige tjenester. Så længe klienten beder om den rigtige service på den rigtige port på den rigtige adresse, vil kommunikation stadig ske. Googles mailtjeneste kørte for eksempel ikke oprindeligt på de fælles portnumre, men fordi de ved, hvordan de får adgang til deres konti, kan brugerne stadig få deres mail.

I modsætning til netværksklienten er alle variabler på serveren kabelforbundet. Enhver service, der forventes at køre konstant, bør ikke have variablerne i dens interne logik sat på kommandolinjen. Den eneste variation på dette ville være, hvis du af en eller anden grund ønskede, at tjenesten køres lejlighedsvis og på forskellige portnumre. Hvis dette var tilfældet, ville du dog stadig kunne se systemtiden og ændre bindinger i overensstemmelse hermed.

Som allerede nævnt skal serveren kende den vært, som den skal tilknyttes, og den port, som den skal lytte til. Til vores formål skal vi overhovedet have tjenesten gældende for ethvert værtsnavn.

Som tidligere nævnt vil havnen være 8080. Så bemærk, at hvis du bruger denne server sammen med netværksklienten, skal du ændre det portnummer, der bruges i det program.

Om der skal anmodes om oplysninger eller betjenes for at få adgang til Internet, vi er nødt til at oprette en stikkontakt. Syntaks for dette opkald er som følger:

De to første er naturligvis internetprotokoller. Alt dette, der rejser over internettet, kan fås i disse familier. Mange netværk kører stadig ikke på IPv6. Så medmindre du ved andet, er det sikrest at standard IPv4 og bruge AF_INET.

Langt de mest almindelige typer er SOCK_STEAM og SOCK_DGRAM, fordi de fungerer på de to protokoller i IP-pakken (TCP og UDP). De sidstnævnte tre er meget sjældnere og understøttes muligvis ikke altid.

Efter oprettelse af socket skal vi derefter indstille socketindstillingerne. For ethvert socket-objekt kan du indstille socket-indstillingerne ved hjælp af metoden setsockopt (). Syntaks er som følger:

Hvis vi ønsker at give feedback til den person, der ringer til serveren, kunne vi nu indtaste en udskrivningskommando for at bekræfte, at serveren er i gang.

Når vi har konfigureret serveren, skal vi nu fortælle det Python hvad man skal gøre, når der fremsættes en anmodning i den givne havn. Til dette refererer vi til anmodningen efter dens værdi og bruger den som argumentet for en vedvarende mens-loop.

Når der fremsættes en anmodning, skal serveren acceptere anmodningen og oprette et filobjekt til at interagere med det.

I dette tilfælde bruger serveren den samme port til læsning og skrivning. Derfor får makefile-metoden et argument 'rw'. Nulængden af ​​bufferstørrelsen overlader simpelthen den del af filen til at blive bestemt dynamisk.

Medmindre vi ønsker at oprette en single-action-server, er det næste trin at læse input fra filobjektet. Når vi gør det, skal vi være omhyggelige med at fjerne det input af overskydende hvidrum.

Anmodningen kommer i form af en handling, efterfulgt af en side, protokollen og versionen af ​​den protokol, der bruges. Hvis man ønsker at tjene en webside, opdeler man dette input for at hente den ønskede side og læser derefter den side i en variabel, der derefter skrives til socketfil-objektet. En funktion til læsning af en fil i en ordbog findes i bloggen.

For at gøre denne tutorial lidt mere illustrerende for, hvad man kan gøre med socket-modulet, vil vi forlade den del af serveren og i stedet vise, hvordan man kan nuancere præsentationen af ​​data. Indtast de næste flere linjer i program.

Hvis man sender en webside, er den første linje en dejlig måde at introducere dataene til en webbrowser. Hvis det udelades, er de fleste webbrowsere som standard gengivelse HTML. Men hvis en inkluderer det, skal 'OK' følges af to nye linjetegn. Disse bruges til at skelne protokoloplysningerne fra sideindholdet.

Syntaxen for den første linje, som du sandsynligvis kan antage, er protokol, protokolversion, beskednummer og status. Hvis du nogensinde har gået til en webside, der er flyttet, har du sandsynligvis modtaget en 404-fejl. 200-meddelelsen her er simpelthen den bekræftende meddelelse.

Resten af ​​output er simpelthen en webside, der er opdelt over flere linjer. Du bemærker, at serveren kan programmeres til at bruge brugerdata i output. Den sidste linje afspejler webanmodningen, da den blev modtaget af serveren.

Til sidst, som afslutningen fungerer for anmodningen, er vi nødt til at lukke filobjektet og serverkontakten.

Gem nu dette program under et genkendeligt navn. Når du har kaldt den med 'python program_name.py', hvis du programmerede en meddelelse for at bekræfte tjenesten som kører, skal denne udskrives på skærmen. Terminalen ser ud til at pause. Alt er som det skal være. Åbn din webbrowser og gå til localhost: 8080. Derefter skal du se output fra de skrivekommandoer, vi gav. Bemærk, at jeg af hensyn til plads ikke implementerede fejlhåndtering i dette program. Dog skal ethvert program frigivet i 'vildt'.

instagram story viewer