Verwenden Sie das SocketServer-Modul, um eine gleichzeitige Verbindung und nicht blockierende Kommunikation zwischen Netzwerk-Clients und -Servern zu realisieren.
Lassen Sie uns zunächst die im SocketServer-Modul verfügbaren Klassen verstehen:
BaseServer: Enthält den Kern des Servers Die Funktion ist an die Mix-In-Klasse gebunden. Diese Klasse wird nur zur Ableitung verwendet. Daher werden keine Instanzen dieser Klasse generiert.
TCPServer/UDPServer: Grundlegender TCP/UDP-Server für die Netzwerksynchronisierung.
UnixStreamServer/UnixDatagramServer: Grundlegender dateibasierter Synchronisierungs-TCP/UDP-Server.
FürkingMixIn/ThreadingMixIn: Implementiert den Kernprozess oder Threading-Funktionen als Hybridklasse, die zusammen mit der Serverklasse verwendet wird, um einige asynchrone Funktionen bereitzustellen;
ForkingTCPServer/ForkingUDPServer: Eine Kombination aus ForkingMixIn und TCPServer/UDPServer.
BaseRequestHandler: Enthält die Kernfunktionalität für die Bearbeitung von Serviceanfragen. Diese Klasse dient nur der Ableitung, daher werden keine Instanzen dieser Klasse generiert. Erwägen Sie die Verwendung von StreamRequestHandler oder DatagramRequestHandler.
StreamRequestHandler/ DatagramRequestHandler: Dienstverarbeitungstool für TCP/UDP-Server.
Jetzt betreten wir offiziell das Thema. Hier verwenden wir StreamRequestHandler und ThreadingTCPServer, um gleichzeitige nicht blockierende Socket-Verbindungen zwischen dem Client und dem Server zu realisieren.
ThreadingTCPServer ist von ThreadingMixIn abgeleitet und implementiert hauptsächlich die Kernprozesskombination und Threading-Funktion.
StreamRequestHandler wird hauptsächlich als Dienstverarbeitungstool für TCP/UDP-Server verwendet.
1. SocketServerTCP-Server erstellen
#创建SocketServerTCP服务器: import SocketServer from SocketServer import StreamRequestHandler as SRH from time import ctime host = 'xxx.xxx.xxx.xxx' port = 9999 addr = (host,port) class Servers(SRH): def handle(self): print 'got connection from ',self.client_address self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime())) while True: data = self.request.recv(1024) if not data: break print data print "RECV from ", self.client_address[0] self.request.send(data) print 'server is running....' server = SocketServer.ThreadingTCPServer(addr,Servers) server.serve_forever()
2. SocketServerTCP-Client erstellen
#from socket from socket import * host = 'xxx.xxx.xxx.xxx' port = 9999 bufsize = 1024 addr = (host,port) #client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client = socket(AF_INET,SOCK_STREAM) client.connect(addr) while True: data = raw_input() if not data or data=='exit': break client.send('%s\r\n' % data) data = client.recv(bufsize) if not data: break print data.strip() client.close()
Das obige ist der detaillierte Inhalt vonEinführung in die Methode zur Realisierung einer nicht blockierenden Kommunikation zwischen Client und Server mithilfe von SocketServer in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!