Denna handledning kommer att ge en introduktion till uttag i Python och hur man använder uttagsmodulen för att bygga HTTP-servrar och klienter i Python. Det kommer också att omfatta Tornado, ett Python nätverk bibliotek som är idealiskt för lång polling, WebSockets och andra applikationer som kräver en långlivad anslutning till varje användare.
Ett uttag är en länk mellan två applikationer som kan kommunicera med varandra (antingen lokalt på en enda maskin eller på distans mellan två maskiner på olika platser).
I grunden fungerar socklar som en kommunikationslänk mellan två enheter, dvs en server och en klient. En server kommer att ge ut information som begärs av en klient. När du till exempel besökte den här sidan skapade webbläsaren ett uttag och kopplade till servern.
För att skapa ett uttag, använder du socket.socket ()
funktionen och syntaxen är lika enkel som:
import socket s = socket.socket (socket_family, socket_type, protocol = 0)
Här är beskrivningen av argumenten:
När du har hämtat ditt socketobjekt kan du sedan skapa en server eller klient som önskat med hjälp av de metoder som finns i socketmodulen.
Innan vi börjar, låt oss titta på de klientuttagsmetoder som finns i Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.connect ()
: Initierar en TCP-serveranslutning.För att skapa ett nytt uttag, importerar du först socket-metoden i socketklassen.
importuttag
Därefter skapar vi ett strömuttag (TCP) enligt följande:
stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
De AF_INET
argument anger att du begär ett Internet Protocol (IP) -uttag, speciellt IPv4. Det andra argumentet är transportprotokollstypen SOCK_STREAM
för TCP-uttag. Dessutom kan du också skapa ett IPv6-uttag genom att ange socket AF_INET6
argument.
Ange servern.
server = "localhost"
Ange porten vi vill kommunicera med.
port = 80
Anslut uttaget till porten där servern lyssnar.
server_address = ((värd, port)) stream_socket.connect (server_address)
Det är viktigt att notera att värden och porten måste vara en tupel.
Skicka en dataförfrågan till servern:
message = 'message' stream_socket.sendall (meddelande)
Få svaret från servern:
data = sock.recv (10) utskriftsdata
För att stänga ett anslutet uttag använder du den närmaste metoden:
stream_socket.close ()
Nedan finns den fullständiga koden för klienten / servern.
import socket import sys # Skapa en TCP / IP-uttag stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definiera värd värd = 'localhost' # definiera kommunikationsporten porten = 8080 # Anslut socket till porten där servern lyssnar server_address = ((värd, port)) skriv ut "ansluta" stream_socket.connect (server_address) # Skicka data message = 'message' stream_socket.sendall (meddelande) # response data = stream_socket.recv (10) uttaget stängt 'stream_socket.close ()
Låt oss nu titta på en enkel Python-server. Följande är socket server metoder tillgängliga i Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.bind ()
: Binder adress (värdnamn, portnummer) till uttaget.s.listen ()
: Ställer in och startar TCP-lyssnare.s.accept ()
: Accepterar TCP-klientanslutning.Vi följer följande steg:
Här är serverns program.
import socket import sys # Skapa en TCP / IP socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definiera värd värd = 'localhost' # definiera kommunikationsporten porten = 8080 # Binda uttaget till port socken. binda ((värd, port)) # Lyssna på inkommande anslutningar sock.listen (1) # Vänta på ett anslutningsutskrift "väntar på en anslutning" -anslutning, klient = sock.accept () skrivarklient, "ansluten" # Ta emot data i små bitar och vidarebefordra det data = connection.recv (16) skriv 'mottagna'% s ''% data om data: connection.sendall (data) annars: skriv ut 'ingen data från', klient # Stäng anslutningsanslutningen ()
Servern är nu klar för inkommande anslutningar.
Kör nu klient- och serverns program i separata terminalfönster, så de kan kommunicera med varandra.
$ python server.py väntar på en anslutning ("127.0.0.1", 47050) ansluten mottaget "meddelande"
$ python client.py anslutningsmeddelandet stängt
Tornado-ramen är ett av de bibliotek som är tillgängliga för nätverksprogrammering i Python. I det här avsnittet diskuterar vi det här biblioteket och visar hur du använder det för att bygga WebSockets.
Tornado är ett Python webb ramverk och asynkron nätverksbibliotek. Tornado använder det icke-blockerande nätverket I / O, och kan därför skala till tiotusentals öppna anslutningar. Denna egenskap gör den idealisk för lång polling, WebSockets och andra applikationer som kräver en långlivad anslutning till varje användare.
Låt oss skapa en enkel Tornado WebSocket:
importera tornado.ioloop import tornado.web klass ApplicationHandler (tornado.web.RequestHandler): def get (self): self.message = message = "" "Tornado Framework Välkommen till Tornado-ramen "" "self.write (meddelande) om __name__ ==" __main__ ": application = tornado.web.Application ([(r" / "ApplicationHandler),") application.listen (5001) tornado.ioloop.IOLoop.instance ().Start()
I koden ovan:
ApplicationHandler
som fungerar som hanteraren för en förfrågan och returnerar ett svar med hjälp av skriva()
metod.huvud
Metod är posten för programmet.tornado.web.Application
skapar en bas för webbapplikationen och tar en samling hanterare, dvs ApplicationHandler.tornado.ioloop.IOLoop.instance (). start ()
skapar en nonblocking-tråd för en applikation.Om vi kör programmet kommer vi att få resultatet som visas på skärmdumpen nedan.
Nu måste du ha förstått grunderna för socket programmering i Python och hur du kan bygga en enkel server och klient. Gärna experimentera genom att bygga din egen chattklient. För mer information, besök de officiella Python-dokumenten.
Tveka inte heller att se vad vi har till salu och studera på Envato Market, och tveka inte att ställa några frågor och ge din värdefulla feedback genom att använda foderet nedan.