Ställ in en Internet-server i Python med hjälp av socket

Som ett komplement till handledning för nätverksklienten, visar denna handledning hur man implementerar en enkel webbserver i Pytonorm. För att vara säker är detta ingen ersättning för Apache eller Zope. Det finns också mer robusta sätt att implementera webbtjänster i Python med hjälp av moduler som BaseHTTPServer. Denna server använder uttagsmodulen uteslutande.

Du kommer ihåg att socket-modulen är ryggraden i de flesta Python-moduler för webbtjänst. Precis som för den enkla nätverksklienten, att bygga en server med den illustrerar grunderna för webbtjänster i Python på ett öppet sätt. BaseHTTPServer själv importerar socketmodulen för att påverka en server.

Som granskning sker alla nätverkstransaktioner mellan klienter och servrar. I de flesta protokoll frågar klienterna en viss adress och tar emot data.

Inom varje adress kan en mängd servrar köras. Gränsen är i hårdvaran. Med tillräcklig hårdvara (RAM, processorhastighet etc.) kan samma dator fungera som en webbserver, en ftp-server och

instagram viewer
Mejl server (pop, smtp, imap eller allt ovanstående) samtidigt. Varje tjänst är kopplad till en port. Porten är bunden till ett uttag. Servern lyssnar på den tillhörande porten och ger information när förfrågningar tas emot på den porten.

Så för att påverka en nätverksanslutning måste du känna till värden, porten och de åtgärder som är tillåtna på den porten. De flesta webbservrar körs på port 80. Men för att undvika konflikt med en installerad Apache-server kommer vår webbserver att köras på port 8080. För att undvika konflikt med andra tjänster är det bäst att hålla HTTP-tjänster i port 80 eller 8080. Dessa är de två vanligaste. Uppenbarligen, om dessa används, måste du hitta en öppen port och varna användare för ändringen.

Som med nätverksklienten bör du notera att dessa adresser är de vanliga portnumren för de olika tjänsterna. Så länge klienten ber om rätt service på rätt port på rätt adress kommer kommunikation fortfarande att ske. Googles e-posttjänsten kördes till exempel ursprungligen inte på de vanliga portnumren, men eftersom de vet hur de får åtkomst till sina konton kan användare fortfarande få sin post.

Till skillnad från nätverksklienten är alla variabler på servern hårdkopplade. Varje tjänst som förväntas köras ständigt bör inte ha variablerna för dess interna logik inställd på kommandoraden. Den enda variationen på detta skulle vara om du av någon anledning ville att tjänsten ska köras ibland och på olika hamnenummer. Om detta var fallet skulle du dock kunna se systemtid och ändra bindningar i enlighet därmed.

Som redan nämnts måste servern känna till värden som den ska kopplas till och porten att lyssna på. För våra ändamål ska vi ha tjänsten som gäller alla värdnamn alls.

Hamnen kommer, som nämnts tidigare, att vara 8080. Så notera att om du använder den här servern tillsammans med nätverksklienten måste du ändra portnumret som används i det program.

Oavsett om du vill begära information eller betjäna den för att få åtkomst till Internet, vi måste skapa ett uttag. Syntaxen för detta samtal är som följer:

De två första är uppenbarligen internetprotokoll. Allt som reser över internet kan nås i dessa familjer. Många nätverk körs fortfarande inte på IPv6. Så, om du inte vet något annat, är det säkrast att standard som IPv4 och använda AF_INET.

Överlägset är de vanligaste typerna SOCK_STEAM och SOCK_DGRAM eftersom de fungerar på de två protokollen för IP-sviten (TCP och UDP). De senare tre är mycket sällsynta och stöds kanske inte alltid.

Efter att ha skapat uttaget måste vi sedan ställa in uttagsalternativen. För alla socketobjekt kan du ställa in socketalternativen med metoden setsockopt (). Syntaxen är som följer:

Om vi ​​vill ge feedback till den som ringer servern kan vi nu ange ett utskriftskommando för att bekräfta att servern är igång.

Efter att ha konfigurerat servern måste vi nu berätta Pytonorm vad man ska göra när en begäran görs på den angivna porten. För detta hänvisar vi till begäran med dess värde och använder den som argumentet för en ihållande medan-loop.

När en begäran görs bör servern acceptera begäran och skapa ett filobjekt för att interagera med den.

I det här fallet använder servern samma port för att läsa och skriva. Därför ges makefile-metoden ett argument "rw". Nolllängden på buffertstorleken lämnar helt enkelt den delen av filen som ska bestämmas dynamiskt.

Om vi ​​inte vill skapa en server med en åtgärd är nästa steg att läsa inmatning från filobjektet. När vi gör det borde vi vara noga med att ta bort den inmatningen av överskott av vitrum.

Begäran kommer i form av en åtgärd, följt av en sida, protokollet och versionen av protokollet som används. Om man vill betjäna en webbsida delar man denna inmatning för att hämta den begärda sidan och läser sedan den sidan i en variabel som sedan skrivs till socketfilobjektet. En funktion för att läsa en fil i en ordlista finns i bloggen.

För att göra denna självstudie lite mer illustrativ över vad man kan göra med socket-modulen, kommer vi att avstå från den delen av servern och istället visa hur man kan nyansera presentationen av data. Ange nästa flera rader i program.

Om man skickar en webbsida är den första raden ett trevligt sätt att introducera data till en webbläsare. Om den inte lämnas kommer de flesta webbläsare som standard att visas html. Men om en inkluderar det måste 'OK' följas av två nya linjetecken. Dessa används för att skilja protokollinformation från sidinnehållet.

Syntaxen för den första raden, som du antagligen kan anta, är protokoll, protokollversion, meddelandenummer och status. Om du någonsin har gått till en webbsida som har flyttats har du antagligen fått ett 404-fel. 200-meddelandet här är helt enkelt det bekräftande meddelandet.

Resten av utgången är helt enkelt en webbsida uppdelad över flera rader. Du kommer att notera att servern kan programmeras för att använda användardata i utgången. Den sista raden återspeglar webbbegäran eftersom den mottogs av servern.

Slutligen måste vi stänga filobjektet och serveruttaget som avslutande handlingar för begäran.

Spara nu detta program under ett igenkännbart namn. När du har ringt det med 'python program_name.py', om du programmerat ett meddelande för att bekräfta tjänsten som körs, bör detta skrivas ut på skärmen. Terminalen verkar då pausa. Allt är som det ska vara. Öppna din webbläsare och gå till localhost: 8080. Du bör sedan se utgången från de skrivkommandon som vi gav. Observera att jag för rymdens skull inte implementerade felhantering i det här programmet. Men alla program som släpps ut i det "vilda" borde.

instagram story viewer