Questo tutorial fornirà un'introduzione ai socket in Python e su come utilizzare il modulo socket per creare server e client HTTP in Python. Troverà inoltre Tornado, una libreria di rete Python ideale per lunghi sondaggi, WebSocket e altre applicazioni che richiedono una connessione a lunga durata per ogni utente.
Un socket è un collegamento tra due applicazioni che possono comunicare tra loro (localmente su una singola macchina o in remoto tra due macchine in posizioni separate).
Fondamentalmente, i socket fungono da collegamento di comunicazione tra due entità, vale a dire un server e un client. Un server fornirà informazioni richieste da un cliente. Ad esempio, quando hai visitato questa pagina, il browser ha creato un socket e connesso al server.
Per creare un socket, usi il socket.socket ()
funzione, e la sintassi è semplice come:
import socket s = socket.socket (socket_family, socket_type, protocol = 0)
Ecco la descrizione degli argomenti:
Dopo aver ottenuto l'oggetto socket, è possibile creare un server o un client come desiderato utilizzando i metodi disponibili nel modulo socket.
Prima di iniziare, diamo un'occhiata ai metodi del socket client disponibili in Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.connect ()
: Avvia una connessione al server TCP.Per creare un nuovo socket, devi prima importare il metodo socket della classe socket.
zoccolo di importazione
Successivamente, creeremo un socket di streaming (TCP) come segue:
stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
Il AF_INET
argomento indica che stai richiedendo un socket IP (Internet Protocol), in particolare IPv4. Il secondo argomento è il tipo di protocollo di trasporto SOCK_STREAM
per socket TCP. Inoltre, è anche possibile creare un socket IPv6 specificando il socket AF_INET6
discussione.
Specificare il server.
server = "localhost"
Specifica la porta con cui vogliamo comunicare.
porta = 80
Collegare il socket alla porta in cui il server è in ascolto.
server_address = ((host, porta)) stream_socket.connect (server_address)
È importante notare che l'host e la porta devono essere una tupla.
Invia una richiesta di dati al server:
messaggio = 'messaggio' stream_socket.sendall (messaggio)
Ottieni la risposta dal server:
data = sock.recv (10) stampa i dati
Per chiudere un socket connesso, utilizzare il metodo close:
stream_socket.close ()
Di seguito è riportato il codice completo per il client / server.
importa socket importa sys # Crea un socket TCP / IP stream_socket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definisci host host = 'localhost' # definisce la porta di comunicazione port = 8080 # Connetti il socket alla porta dove server sta ascoltando server_address = ((host, porta)) stampa "connessione" stream_socket.connect (indirizzo_server) # Invia messaggio dati = 'messaggio' stream_socket.sendall (messaggio) # response data = stream_socket.recv (10) stampa dati di stampa ' socket chiuso 'stream_socket.close ()
Ora diamo un'occhiata a un semplice server Python. I seguenti sono i metodi del server socket disponibili in Python.
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.bind ()
: Associa indirizzo (nome host, numero di porta) al socket.s.listen ()
: Imposta e avvia il listener TCP.s.accept ()
: Accetta la connessione client TCP.Seguiremo i seguenti passi:
Ecco il programma server.
import sys import sys # Crea un socket TCP / IP sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) # Definisci host host = 'localhost' # definisce la porta di comunicazione port = 8080 # Bind il socket al port sock. bind ((host, porta)) # Ascolta le connessioni in entrata sock.listen (1) # Attendi una connessione stampa 'in attesa di una connessione', client = sock.accept () print client, 'connected' # Ricevi i dati in piccoli blocchi e ritrasmettalo data = connection.recv (16) stampa 'ricevuto "% s"'% dati se dati: connection.sendall (dati) else: stampa 'no data from', client # Chiude la connessione connection.close ()
Il server è ora pronto per le connessioni in entrata.
Ora esegui i programmi client e server in finestre di terminale separate, in modo che possano comunicare tra loro.
$ python server.py in attesa di una connessione ("127.0.0.1", 47050) connesso "messaggio" ricevuto
$ python client.py socket del messaggio di connessione chiuso
Il framework Tornado è una delle librerie disponibili per la programmazione di rete in Python. In questa sezione, discuteremo di questa libreria e mostreremo come usarla per costruire WebSockets.
Tornado è un framework web Python e una libreria di rete asincrona. Tornado utilizza l'I / O di rete non bloccante e quindi è in grado di ridimensionare a decine di migliaia di connessioni aperte. Questo tratto lo rende ideale per il polling lungo, WebSocket e altre applicazioni che richiedono una connessione a lunga durata per ciascun utente.
Creiamo un semplice WebSocket Tornado:
import tornado.ioloop import tornado.web class ApplicationHandler (tornado.web.RequestHandler): def get (self): self.message = message = "" "Quadro di Tornado Benvenuti nel framework Tornado "" "self.write (messaggio) se __name__ ==" __main__ ": application = tornado.web.Application ([(r" / ", ApplicationHandler),]) application.listen (5001) tornado.ioloop.IOLoop.instance ().inizio()
Nel codice sopra:
ApplicationHandler
che funge da gestore per una richiesta e restituisce una risposta utilizzando il comando Scrivi()
metodo.principale
metodo è la voce per il programma.tornado.web.Application
crea una base per l'applicazione Web e accetta una raccolta di gestori, ad esempio ApplicationHandler.tornado.ioloop.IOLoop.instance (). start ()
crea un thread non bloccante per un'applicazione.Se eseguiamo l'applicazione, otterremo il risultato come mostrato nello screenshot qui sotto.
Ormai devi aver compreso le basi della programmazione dei socket in Python e come puoi costruire un semplice server e client. Sentiti libero di sperimentare costruendo il tuo client di chat. Per ulteriori informazioni, visita i documenti Python ufficiali.
Inoltre, non esitate a vedere ciò che abbiamo a disposizione per la vendita e per studiare nel mercato Envato, e non esitate a fare domande e fornire il vostro prezioso feedback utilizzando il feed qui sotto.