Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Standardbibliothek SocketServer-Lernen

Python-Standardbibliothek SocketServer-Lernen

高洛峰
高洛峰Original
2016-10-20 09:25:291297Durchsuche

Einleitung: Experten sagen oft, dass das Lesen von Quellcode eine sehr effiziente Lernmethode ist. Aber für Anfänger wie uns ist das Lesen von Quellcode eine gute Möglichkeit, Programmierideen und Codierungsstandards zu erlernen. Kurz gesagt, das Lesen des Quellcodes ist nicht allmächtig, und das Nichtlesen des Quellcodes ist absolut unmöglich.

SocketServer ist eine sehr repräsentative Bibliothek in der Standardbibliothek. Es bietet ein Framework für die schnelle Einrichtung von Socket-Servern auf Basis von Sockets und kann durch Mix-in-Techniken Single-Thread-Server zu Multi-Thread- oder Multi-Prozess-Servern weiterentwickeln. Es gibt viele Klassen in Socketserver.py. Lassen Sie uns sie einzeln und die Beziehung zwischen ihnen vorstellen.

BaseServer, TCPServer, UDPServer, ersterer ist die übergeordnete Klasse der beiden letzteren. Die Methoden, die von TCP- und UDP-Servern gemeinsam genutzt werden können, werden in der übergeordneten Klasse implementiert, sodass abstrakte Klassen in der Unterklasse implementiert werden müssen. Daher sollten wir bei der tatsächlichen Arbeit im Allgemeinen die BaseServer-Klasse nicht erben, es sei denn, Sie implementieren oder überladen bestimmte Methoden für sich selbst. Darüber hinaus erben UnixStreamServer und UnixDatagramServer jeweils von TCPserver und UDPServer. Diese beiden Klassen mit dem Wort Unix werden verwendet, um lokale Socket-Server unter *nix zu erstellen (der lokale Socket-Zugriff ist schneller, kann aber nur für die Kommunikation zwischen Prozessen auf der lokalen Maschine verwendet werden)

Als nächstes folgen ForkingMixIn und ThreadingMixIn sind zwei gemischte Klassen, die beide neue Implementierungen der Methode „process_request“ in der Klasse „Server“ bereitstellen. Erstere startet bei der Verarbeitung jeder Benutzerverbindung einen neuen Prozess, während letztere einen neuen Thread startet. Wenn Sie möchten, dass die Server-Klasse die gleichzeitige Verarbeitung implementiert, verwenden Sie einfach die Mehrfachvererbung. Oder verwenden Sie direkt die bereits gemischte

class ForkingUDPServer(ForkingMixIn, UDPServer): pass

class ForkingTCPServer(ForkingMixIn, TCPServer): pass

class ThreadingUDPServer(ThreadingMixIn, UDPServer) : pass

class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass

Die letzten nicht eingeführten sind BaseRequestHandler, StreamRequestHandler und DatagramRequestHandler. Ersteres ist wie Server die übergeordnete Klasse der beiden letzteren, die öffentlich bereitgestellt werden sollen Methode

Normalerweise instanziieren wir bei Verwendung von SocketServer nur selbst eine geeignete Serverklasse und übergeben beim Instanziieren deren Überwachungs-IP und Port sowie die Klasse, die zuvor von einem RequestHandler geerbt wurde (erforderlich). Implementieren Sie die hanle-Methode durch Sie selbst als Anforderungsprozessor des Servers)

Hier ist besondere Aufmerksamkeit zu beachten:

1. Die IP und der Port werden als Tupel und nicht als zwei separate Parameter übergeben.

2. Jede Kundenverbindung wird geschlossen, nachdem die hanle-Methode ausgeführt wurde. Wenn Sie sie nicht schließen möchten, müssen Sie die def Shutdown_request(self, request)-Methode im Server

neu schreiben

___________________ ich Es ist eine wunderschöne Trennlinie ____________________________

Man kann sagen, dass diese Standardbibliothek sehr bequem zu verwenden ist, aber dennoch einige Funktionsmängel aufweist.

1. Es stellt keinen Kommunikationsmechanismus zwischen den einzelnen Hanle-Instanzen bereit, daher müssen Clients dennoch ein Beobachtermodell implementieren, um Nachrichten aneinander zu senden.

Diese Funktion scheint jedoch die Aufgabenbereiche von SocketServer zu überschreiten. Wir können es selbst implementieren oder Python-Message, eine inländische Bibliothek eines Drittanbieters, verwenden, um eine nachrichtenbasierte Programmierung zwischen Threads durchzuführen.

2. Es bietet eine Multithread- und Multiprozesslösung, aber der Server ohne asynchrone Lösung wird jedes Mal blockiert, wenn darauf zugegriffen wird

Das tut mir sehr leid, aber das hier Auch die Bibliothek ist nicht allzu kompliziert. Sie können selbst einen asynchronen Socketserver schreiben und haben selbst genug Essen und Kleidung!

Da es sich ursprünglich um eine Interpretation des Quellcodes handelt, gibt es in diesem Artikel keinen Code. Leser können in die Standardbibliothek gehen und es selbst lesen. Die Kommentare sind wirklich großartig.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn