เซิร์ฟเวอร์ Http ในตัวและเอ็นจิ้นภายใน
CherryPy มาพร้อมกับเซิร์ฟเวอร์เว็บ (HTTP) ของตัวเอง นั่นคือเหตุผลที่ CherryPy มีอยู่ในตัวและอนุญาตให้ผู้ใช้เรียกใช้แอปพลิเคชัน CherryPy ภายในไม่กี่นาทีหลังจากได้รับไลบรารี
web server ทำหน้าที่เป็นประตูสู่แอปพลิเคชันด้วยความช่วยเหลือซึ่งคำขอและการตอบกลับทั้งหมดจะถูกติดตาม
ในการเริ่มต้นเว็บเซิร์ฟเวอร์ผู้ใช้ต้องทำการโทรต่อไปนี้ -
cherryPy.server.quickstart()
internal engine of CherryPy รับผิดชอบกิจกรรมต่อไปนี้ -
- การสร้างและการจัดการอ็อบเจ็กต์การร้องขอและการตอบกลับ
- การควบคุมและจัดการกระบวนการ CherryPy
CherryPy - การกำหนดค่า
เฟรมเวิร์กมาพร้อมกับระบบคอนฟิกูเรชันของตัวเองที่ให้คุณกำหนดพารามิเตอร์เซิร์ฟเวอร์ HTTP การตั้งค่าสำหรับการกำหนดค่าสามารถจัดเก็บไว้ในไฟล์ข้อความที่มีไวยากรณ์ใกล้เคียงกับรูปแบบ INI หรือเป็นพจนานุกรม Python ที่สมบูรณ์
ในการกำหนดค่าอินสแตนซ์เซิร์ฟเวอร์ CherryPy นักพัฒนาจำเป็นต้องใช้ส่วนส่วนกลางของการตั้งค่า
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
CherryPy มีการพัฒนาอย่างช้าๆ แต่รวมถึงการรวบรวมข้อมูลจำเพาะของ HTTP ด้วยการสนับสนุน HTTP / 1.0 ในภายหลังการถ่ายโอนด้วยการสนับสนุน HTTP / 1.1
CherryPy ได้รับการกล่าวถึงว่าเป็นไปตามเงื่อนไขกับ HTTP / 1.1 เนื่องจากใช้ทุกระดับที่จำเป็นและจำเป็น แต่ไม่ใช่ทุกระดับที่ควรของข้อกำหนด ดังนั้น CherryPy จึงรองรับคุณสมบัติต่อไปนี้ของ HTTP / 1.1 -
หากไคลเอ็นต์อ้างว่าสนับสนุน HTTP / 1.1 ไคลเอ็นต์จะต้องส่งฟิลด์ส่วนหัวในคำขอใด ๆ ที่สร้างด้วยโปรโตคอลเวอร์ชันที่ระบุ หากไม่ดำเนินการ CherryPy จะหยุดดำเนินการตามคำขอทันที
CherryPy สร้างฟิลด์ส่วนหัววันที่ซึ่งใช้ในการกำหนดค่าทั้งหมด
CherryPy สามารถจัดการรหัสสถานะการตอบกลับ (100) ด้วยการสนับสนุนจากลูกค้า
เซิร์ฟเวอร์ HTTP ในตัวของ CherryPy รองรับการเชื่อมต่อแบบต่อเนื่องซึ่งเป็นค่าเริ่มต้นใน HTTP / 1.1 ผ่านการใช้ส่วนหัว Connection: Keep-Alive
CherryPy จัดการคำขอและการตอบกลับที่เรียงเป็นกลุ่มอย่างถูกต้อง
CherryPy รองรับคำขอในสองวิธีที่แตกต่างกัน - ส่วนหัว If-Modified-Since และ If-Unmodified-Since และส่งการตอบกลับตามคำขอ
CherryPy อนุญาตวิธี HTTP ใด ๆ
CherryPy จัดการการรวมกันของเวอร์ชัน HTTP ระหว่างไคลเอนต์และการตั้งค่าที่กำหนดไว้สำหรับเซิร์ฟเวอร์
แอ็พพลิเคชันเซิร์ฟเวอร์แบบมัลติเธรด
CherryPy ได้รับการออกแบบตามแนวคิดมัลติเธรด ทุกครั้งที่นักพัฒนาได้รับหรือกำหนดค่าลงในเนมสเปซ CherryPy จะมีการดำเนินการในสภาพแวดล้อมแบบมัลติเธรด
ทั้ง cherrypy.request และ cherrypy.response เป็นที่เก็บข้อมูลแบบเธรดซึ่งหมายความว่าแอปพลิเคชันของคุณเรียกใช้โดยอิสระโดยการรู้ว่าคำขอใดเป็นพร็อกซีผ่านทางรันไทม์
แอ็พพลิเคชันเซิร์ฟเวอร์ที่ใช้รูปแบบเธรดไม่ได้รับการพิจารณาอย่างสูงเนื่องจากการใช้เธรดถูกมองว่าเป็นการเพิ่มโอกาสที่จะเกิดปัญหาเนื่องจากข้อกำหนดในการซิงโครไนซ์
ทางเลือกอื่น ๆ ได้แก่ -
รูปแบบหลายกระบวนการ
แต่ละคำขอได้รับการจัดการโดยกระบวนการ Python ของตัวเอง ที่นี่ประสิทธิภาพและความเสถียรของเซิร์ฟเวอร์ถือได้ว่าดีกว่า
รูปแบบอะซิงโครนัส
ที่นี่การยอมรับการเชื่อมต่อใหม่และการส่งข้อมูลกลับไปยังไคลเอนต์จะทำแบบอะซิงโครนัสจากกระบวนการร้องขอ เทคนิคนี้ขึ้นชื่อเรื่องประสิทธิภาพ
การส่ง URL
ชุมชน CherryPy ต้องการที่จะมีความยืดหยุ่นมากขึ้นและขอขอบคุณโซลูชันอื่น ๆ สำหรับผู้มอบหมายงาน CherryPy 3 มีดิสแพตเชอร์ในตัวอื่น ๆ และเสนอวิธีง่ายๆในการเขียนและใช้ดิสแพตเชอร์ของคุณเอง
- แอปพลิเคชันที่ใช้ในการพัฒนาวิธี HTTP (รับโพสต์วาง ฯลฯ )
- เส้นทางที่กำหนดเส้นทางใน URL - Routes Dispatcher
HTTP Method Dispatcher
ในบางแอ็พพลิเคชัน URI ไม่ขึ้นอยู่กับการดำเนินการซึ่งเซิร์ฟเวอร์จะดำเนินการบนทรัพยากร
ตัวอย่างเช่น,http://xyz.com/album/delete/10
URI ประกอบด้วยการดำเนินการที่ลูกค้าต้องการดำเนินการ
โดยค่าเริ่มต้นผู้มอบหมายงาน CherryPy จะแมปด้วยวิธีต่อไปนี้ -
album.delete(12)
ผู้มอบหมายงานที่กล่าวถึงข้างต้นถูกกล่าวถึงอย่างถูกต้อง แต่สามารถทำให้เป็นอิสระได้ด้วยวิธีต่อไปนี้ -
http://xyz.com/album/10
ผู้ใช้อาจสงสัยว่าเซิร์ฟเวอร์ส่งหน้าที่ตรงไปอย่างไร ข้อมูลนี้ดำเนินการโดยคำร้องขอ HTTP เอง เมื่อมีการร้องขอจากไคลเอนต์ไปยังเซิร์ฟเวอร์ CherryPy จะดูเป็นตัวจัดการที่เหมาะสมที่สุดตัวจัดการจะเป็นตัวแทนของทรัพยากรที่กำหนดเป้าหมายโดย URI
DELETE /album/12 HTTP/1.1
Routes Dispatcher
นี่คือรายการพารามิเตอร์สำหรับวิธีการที่จำเป็นในการจัดส่ง -
พารามิเตอร์ name คือชื่อเฉพาะสำหรับเส้นทางที่จะเชื่อมต่อ
เส้นทางคือรูปแบบที่ตรงกับ URI
คอนโทรลเลอร์คืออินสแตนซ์ที่มีตัวจัดการเพจ
การใช้ Routes dispatcher จะเชื่อมต่อรูปแบบที่ตรงกับ URI และเชื่อมโยงตัวจัดการเพจเฉพาะ
ตัวอย่าง
ให้เรายกตัวอย่างเพื่อทำความเข้าใจวิธีการทำงาน -
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 ())
ทำตามขั้นตอนด้านล่างเพื่อรับผลลัพธ์ของโค้ดด้านบน -
Step 1 - บันทึกไฟล์ที่กล่าวถึงข้างต้นเป็นไฟล์ tutRoutes.py.
Step 2 - ไปที่ URL ต่อไปนี้ -
http://localhost:8080/generate?length=10
Step 3 - คุณจะได้รับผลลัพธ์ต่อไปนี้ -