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 -