Denne opplæringen vil gi en introduksjon til stikkontakter i Python og hvordan du bruker stikkmodulen til å bygge HTTP-servere og klienter i Python. Det vil også dekke Tornado, et Python nettverksbibliotek som er ideelt for lang polling, WebSockets og andre applikasjoner som krever en lang levetidstilkobling til hver bruker.
En stikkontakt er en kobling mellom to applikasjoner som kan kommunisere med hverandre (enten lokalt på en enkelt maskin eller eksternt mellom to maskiner på forskjellige steder).
I utgangspunktet fungerer stikkontakter som en kommunikasjonsforbindelse mellom to enheter, det vil si en server og en klient. En server vil gi ut informasjon som blir forespurt av en klient. For eksempel, når du besøkte denne siden, opprettet nettleseren en stikkontakt og koblet til serveren.
For å skape en stikkontakt, bruker du socket.socket ()
funksjon, og syntaksen er så enkel som:
import socket s = socket.socket (socket_family, socket_type, protokoll = 0)
Her er beskrivelsen av argumentene:
Etter å ha oppnådd sokkelobjektet, kan du deretter opprette en server eller klient som ønsket ved hjelp av metodene som er tilgjengelige i stikkmodulen.
Før vi kommer i gang, la oss se på klientinngangsmetodene som er tilgjengelige i Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.connect ()
: Starter en TCP-serverforbindelse.For å lage en ny stikkontakt, importerer du først sokkelmetoden til stikkontakten.
Importkontakt
Deretter oppretter vi en strømuttak (TCP) som følger:
stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
De AF_INET
argument indikerer at du ber om en Internett-protokoll (IP) -kontakt, spesielt IPv4. Det andre argumentet er transportprotokoll typen SOCK_STREAM
for TCP-kontakter. I tillegg kan du også opprette en IPv6-kontakt ved å spesifisere kontakten AF_INET6
argument.
Angi serveren.
server = "localhost"
Angi porten vi vil kommunisere med.
port = 80
Koble kontakten til porten der serveren lytter.
server_address = ((vert, port)) stream_socket.connect (server_address)
Det er viktig å merke seg at verten og porten må være en tuple.
Send en dataforespørsel til serveren:
message = 'message' stream_socket.sendall (melding)
Få svar fra serveren:
data = sokk.recv (10) utskriftsdata
For å lukke en tilkoblet kontakt, bruker du nærmetoden:
stream_socket.close ()
Nedenfor er hele koden for klienten / serveren.
import socket import sys # Opprett en TCP / IP-kontakt stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definer vertsverten = 'localhost' # definer kommunikasjonsportporten = 8080 # Koble kontakten til porten der serveren lytter server_address = ((vert, port)) print "connect" stream_socket.connect (server_address) # Send data message = 'message' stream_socket.sendall (melding) # respons data = stream_socket.recv (10) stikkontakt lukket 'stream_socket.close ()
La oss ta en titt på en enkel Python-server. Følgende er socket server metoder tilgjengelig i Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.bind ()
: Binder adresse (vertsnavn, portnummer) til stikkontakt.s.listen ()
: Setter opp og starter TCP-lytteren.s.accept ()
: Godtar TCP-klienttilkobling.Vi følger følgende trinn:
Her er serverprogrammet.
import socket import sys # Lag en TCP / IP socket socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definer vertsverten = 'localhost' # definer kommunikasjonsporten port = 8080 # Bind stikkontakten til port sokkelen. bind ((vert, port)) # Lytt til innkommende tilkoblinger sock.listen (1) # Vent på en tilkoblingsutskrift 'venting på en tilkobling' tilkobling, klient = sock.accept () utskriftsklient, 'koblet' # Motta dataene i små biter og send det om igjen data = connection.recv (16) print 'mottatt'% s ''% data hvis data: connection.sendall (data) annet: skriv ut 'ingen data fra', klient # Lukk tilkoblingsforbindelsen. ()
Serveren er nå klar for innkommende tilkoblinger.
Kjør nå klient- og serverprogrammene i separate terminalvinduer, slik at de kan kommunisere med hverandre.
$ python server.py venter på en tilkobling ('127.0.0.1', 47050) tilkoblet mottatt "melding"
$ python client.py Koble til meldingsuttak lukket
Tornado-rammen er en av bibliotekene som er tilgjengelige for nettverksprogrammering i Python. I denne delen diskuterer vi dette biblioteket og viser hvordan du bruker det til å bygge WebSockets.
Tornado er et Python web rammeverk og asynkron nettverk bibliotek. Tornado bruker det ikke-blokkerende nettverket I / O, og er dermed i stand til å skalere til titusenvis av åpne forbindelser. Denne egenskapen gjør den ideell til langvarig polling, WebSockets og andre applikasjoner som krever en lang levetidstilkobling til hver bruker.
La oss lage en enkel Tornado WebSocket:
importere tornado.ioloop import tornado.web klasse ApplicationHandler (tornado.web.RequestHandler): def get (selv): self.message = message = "" "Tornado Framework Velkommen til Tornado-rammen "" "self.write (melding) hvis __name__ ==" __main__ ": application = tornado.web.Application ([(r" / "ApplicationHandler),") application.listen (5001) tornado.ioloop.IOLoop.instance ().start()
I koden ovenfor:
ApplicationHandler
som fungerer som handler for en forespørsel og returnerer et svar ved hjelp av skrive()
metode.hoved-
Metode er oppføringen for programmet.tornado.web.Application
lager en base for webapplikasjonen og tar en samling av håndteringsprogrammer, dvs. ApplicationHandler.tornado.ioloop.IOLoop.instance (). start ()
lager en nonblocking-tråd for et program.Hvis vi kjører programmet, får vi resultatet som vist på skjermbildet nedenfor.
Nå må du ha tatt grunnlaget for sokkelprogrammering i Python og hvordan du kan bygge en enkel server og klient. Prøv å eksperimentere ved å bygge din egen chatklient. For mer informasjon, besøk de offisielle Python-dokumentene.
Ikke nøl med å se hva vi har tilgjengelig for salg og for studier i Envato Market, og ikke nøl med å stille spørsmål og gi din verdifulle tilbakemelding ved å bruke feedet under.