Server Http & Mesin Internal Bawaan

CherryPy hadir dengan server web (HTTP) sendiri. Itulah mengapa CherryPy berdiri sendiri dan memungkinkan pengguna untuk menjalankan aplikasi CherryPy dalam beberapa menit setelah mendapatkan perpustakaan.

Itu web server bertindak sebagai pintu gerbang ke aplikasi dengan bantuan yang semua permintaan dan tanggapan disimpan di jalurnya.

Untuk memulai server web, pengguna harus melakukan panggilan berikut -

cherryPy.server.quickstart()

Itu internal engine of CherryPy bertanggung jawab atas aktivitas berikut -

  • Pembuatan dan pengelolaan objek permintaan dan respons.
  • Mengontrol dan mengelola proses CherryPy.

CherryPy - Konfigurasi

Kerangka kerja ini dilengkapi dengan sistem konfigurasinya sendiri yang memungkinkan Anda untuk membuat parameter server HTTP. Pengaturan untuk konfigurasi dapat disimpan baik dalam file teks dengan sintaks yang dekat dengan format INI atau sebagai kamus Python lengkap.

Untuk mengonfigurasi instance server CherryPy, pengembang perlu menggunakan bagian global dari pengaturan.

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"

Kepatuhan HTTP

CherryPy telah berevolusi secara perlahan tetapi mencakup kompilasi spesifikasi HTTP dengan dukungan HTTP / 1.0 yang kemudian ditransfer dengan dukungan HTTP / 1.1.

CherryPy dikatakan sesuai secara kondisional dengan HTTP / 1.1 karena ia menerapkan semua level yang harus dan diperlukan tetapi tidak semua level spesifikasi harus. Oleh karena itu, CherryPy mendukung fitur HTTP / 1.1 berikut -

  • Jika klien mengklaim mendukung HTTP / 1.1, ia harus mengirimkan bidang header dalam permintaan apa pun yang dibuat dengan versi protokol yang ditentukan. Jika tidak dilakukan, CherryPy akan segera menghentikan pemrosesan permintaan.

  • CherryPy menghasilkan bidang header Tanggal yang digunakan di semua konfigurasi.

  • CherryPy dapat menangani kode status respons (100) dengan dukungan klien.

  • Server HTTP bawaan CherryPy mendukung koneksi persisten yang merupakan default di HTTP / 1.1, melalui penggunaan header Connection: Keep-Alive.

  • CherryPy menangani permintaan dan tanggapan yang dipotong dengan benar.

  • CherryPy mendukung permintaan dalam dua cara berbeda - header If-Modified-Because dan If-Unmodified-Because dan mengirimkan tanggapan sesuai permintaan yang sesuai.

  • CherryPy mengizinkan metode HTTP apa pun.

  • CherryPy menangani kombinasi versi HTTP antara klien dan set pengaturan untuk server.

Server Aplikasi Multithreaded

CherryPy dirancang berdasarkan konsep multithreading. Setiap kali pengembang mendapatkan atau menetapkan nilai ke dalam namespace CherryPy, hal itu dilakukan di lingkungan multi-utas.

Baik cherrypy.request dan cherrypy.response adalah wadah data utas, yang menyiratkan bahwa aplikasi Anda memanggilnya secara independen dengan mengetahui permintaan mana yang diproksikan melaluinya pada waktu proses.

Server aplikasi yang menggunakan pola ulir tidak terlalu dianggap karena penggunaan utas dipandang meningkatkan kemungkinan masalah karena persyaratan sinkronisasi.

Alternatif lain termasuk -

Pola Multi-proses

Setiap permintaan ditangani oleh proses Python-nya sendiri. Di sini, kinerja dan stabilitas server dapat dianggap lebih baik.

Pola Asinkron

Di sini, menerima koneksi baru dan mengirim data kembali ke klien dilakukan secara asinkron dari proses permintaan. Teknik ini dikenal dengan efisiensinya.

Pengiriman URL

Komunitas CherryPy ingin menjadi lebih fleksibel dan solusi lain untuk dispatcher akan dihargai. CherryPy 3 menyediakan dispatcher built-in lainnya dan menawarkan cara sederhana untuk menulis dan menggunakan dispatcher Anda sendiri.

  • Aplikasi yang digunakan untuk mengembangkan metode HTTP. (DAPATKAN, POSTING, PUT, dll.)
  • Yang mendefinisikan rute di URL - Routes Dispatcher

Penerima Metode HTTP

Dalam beberapa aplikasi, URI tidak bergantung pada tindakan, yang akan dilakukan oleh server pada sumber daya.

Sebagai contoh,http://xyz.com/album/delete/10

URI berisi operasi yang ingin dijalankan klien.

Secara default, operator CherryPy akan memetakan dengan cara berikut -

album.delete(12)

Dispatcher yang disebutkan di atas disebutkan dengan benar, tetapi dapat dibuat independen dengan cara berikut -

http://xyz.com/album/10

Pengguna mungkin bertanya-tanya bagaimana server mengirimkan halaman yang tepat. Informasi ini dibawa oleh permintaan HTTP itu sendiri. Ketika ada permintaan dari klien ke server, CherryPy terlihat sebagai penangan setelan terbaik, penangan adalah representasi sumber daya yang ditargetkan oleh URI.

DELETE /album/12 HTTP/1.1

Rute Dispatcher

Berikut adalah daftar parameter untuk metode yang diperlukan dalam pengiriman -

  • Parameter name adalah nama unik untuk rute yang akan dihubungkan.

  • Rute adalah pola untuk mencocokkan URI.

  • Pengontrol adalah instance yang berisi penangan halaman.

  • Menggunakan Routes dispatcher menghubungkan pola yang cocok dengan URI dan mengaitkan penangan halaman tertentu.

Contoh

Mari kita ambil contoh untuk memahami cara kerjanya -

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

Ikuti langkah-langkah yang diberikan di bawah ini untuk mendapatkan output dari kode di atas -

Step 1 - Simpan file yang disebutkan di atas sebagai tutRoutes.py.

Step 2 - Kunjungi URL berikut -

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

Step 3 - Anda akan menerima output berikut -