Yerleşik Http Sunucusu ve Dahili Motor

CherryPy, kendi web (HTTP) sunucusuyla birlikte gelir. Bu nedenle CherryPy bağımsızdır ve kullanıcıların kütüphaneyi aldıktan sonra dakikalar içinde bir CherryPy uygulamasını çalıştırmasına izin verir.

web server tüm istek ve yanıtların takip edildiği uygulama ile ağ geçidi görevi görür.

Web sunucusunu başlatmak için bir kullanıcının şu aramayı yapması gerekir -

cherryPy.server.quickstart()

internal engine of CherryPy aşağıdaki faaliyetlerden sorumludur -

  • İstek ve yanıt nesnelerinin oluşturulması ve yönetimi.
  • CherryPy sürecini kontrol etmek ve yönetmek.

CherryPy - Yapılandırma

Çerçeve, HTTP sunucusunu parametrelendirmenize izin veren kendi yapılandırma sistemiyle birlikte gelir. Konfigürasyon ayarları, INI formatına yakın sözdizimine sahip bir metin dosyasında veya eksiksiz bir Python sözlüğü olarak saklanabilir.

CherryPy sunucu örneğini yapılandırmak için geliştiricinin ayarların genel bölümünü kullanması gerekir.

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 Uyumluluğu

CherryPy yavaş bir şekilde gelişmektedir ancak daha sonra HTTP / 1.1 desteği ile aktarıldıktan sonra HTTP / 1.0 desteği ile HTTP belirtimlerinin derlenmesini içerir.

CherryPy'nin şartlı olarak HTTP / 1.1 ile uyumlu olduğu söyleniyor, çünkü şartnamenin tüm gerekli ve gerekli seviyeleri uyguluyor, ancak şartnamenin tüm gerekli seviyelerini uygulamıyor. Bu nedenle CherryPy, HTTP / 1.1'in aşağıdaki özelliklerini destekler -

  • Bir istemci HTTP / 1.1'i desteklediğini iddia ederse, belirtilen protokol sürümüyle yapılan herhangi bir istekte bir başlık alanı göndermelidir. Yapılmadığı takdirde CherryPy, talebin işlenmesini derhal durduracaktır.

  • CherryPy, tüm konfigürasyonlarda kullanılan bir Tarih başlık alanı oluşturur.

  • CherryPy, istemcilerin desteğiyle yanıt durum kodunu (100) işleyebilir.

  • CherryPy'nin yerleşik HTTP sunucusu, Bağlantı: Keep-Alive üstbilgisinin kullanımıyla HTTP / 1.1'de varsayılan olan kalıcı bağlantıları destekler.

  • CherryPy, doğru şekilde parçalanmış istekleri ve yanıtları işler.

  • CherryPy, istekleri iki farklı şekilde destekler - If-Modified-Since ve If-Unmodified-Since başlıkları ve isteklere göre yanıtlar gönderir.

  • CherryPy, herhangi bir HTTP yöntemine izin verir.

  • CherryPy, istemci ile sunucu için ayar kümesi arasındaki HTTP sürümlerinin kombinasyonlarını yönetir.

Çok İş Parçacıklı Uygulama Sunucusu

CherryPy, çoklu okuma konseptine göre tasarlanmıştır. Bir geliştirici CherryPy ad alanına her değer girdiğinde veya ayarladığında, bu çok iş parçacıklı ortamda yapılır.

Hem cherrypy.request hem de cherrypy.response, iş parçacığı veri kapsayıcılarıdır ve bu, uygulamanızın çalışma zamanında hangi isteğin kendileri aracılığıyla vekalet edildiğini bilerek bunları bağımsız olarak çağırdığı anlamına gelir.

İş parçacığı modelini kullanan uygulama sunucuları pek dikkate alınmaz, çünkü iş parçacığı kullanımı, senkronizasyon gereksinimleri nedeniyle sorunların olasılığını artırıyor olarak görülür.

Diğer alternatifler şunları içerir:

Çok işlemli Desen

Her istek kendi Python süreciyle işlenir. Burada sunucunun performansı ve kararlılığı daha iyi olarak kabul edilebilir.

Eşzamansız Desen

Burada, yeni bağlantıların kabul edilmesi ve verilerin istemciye geri gönderilmesi, istek sürecinden asenkron olarak yapılır. Bu teknik, etkinliği ile bilinir.

URL Gönderimi

CherryPy topluluğu daha esnek olmak istiyor ve dağıtım görevlileri için diğer çözümlerin takdir edileceğini düşünüyor. CherryPy 3, diğer yerleşik dağıtım programları sağlar ve kendi dağıtım programlarınızı yazmanız ve kullanmanız için basit bir yol sunar.

  • HTTP yöntemlerini geliştirmek için kullanılan uygulamalar. (GET, POST, PUT vb.)
  • URL'deki yolları tanımlayan - Routes Dispatcher

HTTP Yöntem Dağıtıcı

Bazı uygulamalarda, URI'ler, kaynakta sunucu tarafından gerçekleştirilecek eylemden bağımsızdır.

Örneğin,http://xyz.com/album/delete/10

URI, istemcinin gerçekleştirmek istediği işlemi içerir.

Varsayılan olarak, CherryPy dağıtıcısı şu şekilde eşlenir:

album.delete(12)

Yukarıda belirtilen göndericiden doğru bir şekilde bahsedilmiştir, ancak aşağıdaki şekilde bağımsız hale getirilebilir -

http://xyz.com/album/10

Kullanıcı, sunucunun tam sayfayı nasıl gönderdiğini merak edebilir. Bu bilgi HTTP isteğinin kendisi tarafından taşınır. İstemciden sunucuya istek olduğunda CherryPy en uygun işleyiciye bakar, işleyici URI tarafından hedeflenen kaynağın temsilidir.

DELETE /album/12 HTTP/1.1

Güzergah Dağıtıcı

Gönderimde gerekli olan yöntem için parametrelerin listesi aşağıdadır -

  • Ad parametresi, bağlanılacak rotanın benzersiz adıdır.

  • Rota, URI'larla eşleşen modeldir.

  • Denetleyici, sayfa işleyicileri içeren örnektir.

  • Routes dağıtıcısını kullanmak, URI'larla eşleşen ve belirli bir sayfa işleyiciyi ilişkilendiren bir deseni bağlar.

Misal

Nasıl çalıştığını anlamak için bir örnek alalım -

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 ())

Yukarıdaki kodun çıktısını almak için aşağıda verilen adımları izleyin -

Step 1 - Yukarıda belirtilen dosyayı farklı kaydedin tutRoutes.py.

Step 2 - Aşağıdaki URL'yi ziyaret edin -

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

Step 3 - Aşağıdaki çıktıyı alacaksınız -