Eingebauter HTTP-Server und interne Engine

CherryPy verfügt über einen eigenen Web-Server (HTTP). Aus diesem Grund ist CherryPy in sich geschlossen und ermöglicht es Benutzern, eine CherryPy-Anwendung innerhalb von Minuten nach Erhalt der Bibliothek auszuführen.

Das web server fungiert als Gateway zur Anwendung, mit deren Hilfe alle Anforderungen und Antworten im Auge behalten werden.

Um den Webserver zu starten, muss ein Benutzer den folgenden Aufruf tätigen:

cherryPy.server.quickstart()

Das internal engine of CherryPy ist verantwortlich für die folgenden Aktivitäten -

  • Erstellung und Verwaltung von Anforderungs- und Antwortobjekten.
  • Steuern und Verwalten des CherryPy-Prozesses.

CherryPy - Konfiguration

Das Framework verfügt über ein eigenes Konfigurationssystem, mit dem Sie den HTTP-Server parametrisieren können. Die Einstellungen für die Konfiguration können entweder in einer Textdatei mit einer Syntax nahe dem INI-Format oder als vollständiges Python-Wörterbuch gespeichert werden.

Um die CherryPy-Serverinstanz zu konfigurieren, muss der Entwickler den globalen Abschnitt der Einstellungen verwenden.

global_conf = {
   'global': {
      'server.socket_host': 'localhost',
      'server.socket_port': 8080,
   },
}

application_conf = {
   '/style.css': {
      'tools.staticfile.on': True,
      'tools.staticfile.filename': os.path.join(_curdir, 'style.css'),
   }
}

This could be represented in a file like this:
[global]
server.socket_host = "localhost"
server.socket_port = 8080
[/style.css]
tools.staticfile.on = True
tools.staticfile.filename = "/full/path/to.style.css"

HTTP-Konformität

CherryPy hat sich langsam weiterentwickelt, beinhaltet jedoch die Zusammenstellung von HTTP-Spezifikationen mit Unterstützung von HTTP / 1.0, die später mit Unterstützung von HTTP / 1.1 übertragen werden.

CherryPy soll unter bestimmten Bedingungen mit HTTP / 1.1 kompatibel sein, da es alle erforderlichen und erforderlichen Ebenen implementiert, jedoch nicht alle Soll-Ebenen der Spezifikation. Daher unterstützt CherryPy die folgenden Funktionen von HTTP / 1.1:

  • Wenn ein Client behauptet, HTTP / 1.1 zu unterstützen, muss er bei jeder Anforderung mit der angegebenen Protokollversion ein Headerfeld senden. Ist dies nicht der Fall, stoppt CherryPy die Verarbeitung der Anforderung sofort.

  • CherryPy generiert ein Datumsheaderfeld, das in allen Konfigurationen verwendet wird.

  • CherryPy kann den Antwortstatuscode (100) mit Unterstützung von Clients verarbeiten.

  • Der in CherryPy integrierte HTTP-Server unterstützt dauerhafte Verbindungen, die in HTTP / 1.1 standardmäßig verwendet werden, mithilfe des Headers "Verbindung: Keep-Alive".

  • CherryPy verarbeitet korrekt aufgeteilte Anfragen und Antworten.

  • CherryPy unterstützt Anforderungen auf zwei verschiedene Arten: If-Modified-Since- und If-Unmodified-Since-Header und sendet Antworten gemäß den Anforderungen entsprechend.

  • CherryPy erlaubt jede HTTP-Methode.

  • CherryPy verarbeitet die Kombinationen von HTTP-Versionen zwischen dem Client und den für den Server festgelegten Einstellungen.

Multithread-Anwendungsserver

CherryPy basiert auf dem Multithreading-Konzept. Jedes Mal, wenn ein Entwickler einen Wert in den CherryPy-Namespace erhält oder festlegt, erfolgt dies in der Multithread-Umgebung.

Sowohl cherrypy.request als auch cherrypy.response sind Thread-Datencontainer. Dies bedeutet, dass Ihre Anwendung sie unabhängig aufruft, indem sie weiß, welche Anforderung zur Laufzeit über sie übertragen wird.

Anwendungsserver, die das Thread-Muster verwenden, werden nicht hoch geschätzt, da die Verwendung von Threads die Wahrscheinlichkeit von Problemen aufgrund von Synchronisationsanforderungen erhöht.

Die anderen Alternativen umfassen -

Multiprozessmuster

Jede Anfrage wird von einem eigenen Python-Prozess bearbeitet. Hier können Leistung und Stabilität des Servers als besser angesehen werden.

Asynchrones Muster

Hier erfolgt das Akzeptieren neuer Verbindungen und das Zurücksenden der Daten an den Client asynchron vom Anforderungsprozess. Diese Technik ist bekannt für ihre Effizienz.

URL-Versand

Die CherryPy-Community möchte flexibler sein und andere Lösungen für Disponenten wären willkommen. CherryPy 3 bietet andere integrierte Dispatcher und eine einfache Möglichkeit, eigene Dispatcher zu schreiben und zu verwenden.

  • Anwendungen zur Entwicklung von HTTP-Methoden. (GET, POST, PUT usw.)
  • Diejenige, die die Routen in der URL definiert - Routes Dispatcher

HTTP Method Dispatcher

In einigen Anwendungen sind URIs unabhängig von der Aktion, die vom Server auf der Ressource ausgeführt werden soll.

Zum Beispiel,http://xyz.com/album/delete/10

Die URI enthält die Operation, die der Client ausführen möchte.

Standardmäßig ordnet der CherryPy-Dispatcher Folgendes zu:

album.delete(12)

Der oben genannte Dispatcher wird korrekt erwähnt, kann jedoch auf folgende Weise unabhängig gemacht werden:

http://xyz.com/album/10

Der Benutzer kann sich fragen, wie der Server die genaue Seite versendet. Diese Informationen werden von der HTTP-Anforderung selbst übertragen. Wenn eine Anforderung vom Client an den Server eingeht, sieht CherryPy als der am besten geeignete Handler aus. Der Handler ist die Darstellung der Ressource, auf die der URI abzielt.

DELETE /album/12 HTTP/1.1

Routen Dispatcher

Hier ist eine Liste der Parameter für die beim Versand erforderliche Methode -

  • Der Parameter name ist der eindeutige Name für die zu verbindende Route.

  • Die Route ist das Muster für URIs.

  • Der Controller ist die Instanz, die Seitenhandler enthält.

  • Die Verwendung des Routen-Dispatchers verbindet ein Muster, das mit URIs übereinstimmt, und ordnet einen bestimmten Seitenhandler zu.

Beispiel

Nehmen wir ein Beispiel, um zu verstehen, wie es funktioniert -

import random
import string
import cherrypy

class StringMaker(object):
   @cherrypy.expose
   def index(self):
      return "Hello! How are you?"
   
   @cherrypy.expose
   def generate(self, length=9):
      return ''.join(random.sample(string.hexdigits, int(length)))
		
if __name__ == '__main__':
   cherrypy.quickstart(StringMaker ())

Befolgen Sie die unten angegebenen Schritte, um die Ausgabe des obigen Codes zu erhalten -

Step 1 - Speichern Sie die oben genannte Datei als tutRoutes.py.

Step 2 - Besuchen Sie die folgende URL -

http://localhost:8080/generate?length=10

Step 3 - Sie erhalten folgende Ausgabe -