Máy chủ Http tích hợp & Công cụ nội bộ

CherryPy đi kèm với máy chủ web (HTTP) của riêng nó. Đó là lý do tại sao CherryPy hoạt động độc lập và cho phép người dùng chạy ứng dụng CherryPy trong vòng vài phút sau khi nhận được thư viện.

Các web server hoạt động như một cổng vào ứng dụng với sự trợ giúp của tất cả các yêu cầu và phản hồi được theo dõi.

Để khởi động máy chủ web, người dùng phải thực hiện cuộc gọi sau:

cherryPy.server.quickstart()

Các internal engine of CherryPy chịu trách nhiệm cho các hoạt động sau -

  • Tạo và quản lý các đối tượng yêu cầu và phản hồi.
  • Kiểm soát và quản lý quá trình CherryPy.

CherryPy - Cấu hình

Khung công tác đi kèm với hệ thống cấu hình riêng cho phép bạn tham số hóa máy chủ HTTP. Các cài đặt cho cấu hình có thể được lưu trữ trong một tệp văn bản có cú pháp gần với định dạng INI hoặc dưới dạng một từ điển Python hoàn chỉnh.

Để cấu hình phiên bản máy chủ CherryPy, nhà phát triển cần sử dụng phần cài đặt chung.

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"

Tuân thủ HTTP

CherryPy đã phát triển chậm nhưng nó bao gồm việc biên dịch các thông số kỹ thuật HTTP với sự hỗ trợ của HTTP / 1.0 sau đó chuyển giao với sự hỗ trợ của HTTP / 1.1.

CherryPy được cho là tuân thủ có điều kiện với HTTP / 1.1 vì nó thực hiện tất cả các mức phải và bắt buộc nhưng không phải tất cả các mức nên của đặc tả. Do đó, CherryPy hỗ trợ các tính năng sau của HTTP / 1.1:

  • Nếu khách hàng tuyên bố hỗ trợ HTTP / 1.1, nó phải gửi trường tiêu đề trong bất kỳ yêu cầu nào được thực hiện với phiên bản giao thức được chỉ định. Nếu nó không được thực hiện, CherryPy sẽ ngay lập tức dừng quá trình xử lý yêu cầu.

  • CherryPy tạo trường tiêu đề Ngày được sử dụng trong tất cả các cấu hình.

  • CherryPy có thể xử lý mã trạng thái phản hồi (100) với sự hỗ trợ của khách hàng.

  • Máy chủ HTTP tích hợp của CherryPy hỗ trợ các kết nối liên tục được mặc định trong HTTP / 1.1, thông qua việc sử dụng tiêu đề Connection: Keep-Alive.

  • CherryPy xử lý các yêu cầu và phản hồi được phân loại chính xác.

  • CherryPy hỗ trợ các yêu cầu theo hai cách riêng biệt - tiêu đề If-Modified-Since và If-Unmodified-Since và gửi phản hồi theo các yêu cầu tương ứng.

  • CherryPy cho phép bất kỳ phương thức HTTP nào.

  • CherryPy xử lý sự kết hợp của các phiên bản HTTP giữa máy khách và cài đặt được đặt cho máy chủ.

Máy chủ ứng dụng đa luồng

CherryPy được thiết kế dựa trên khái niệm đa luồng. Mỗi khi nhà phát triển lấy hoặc đặt một giá trị vào không gian tên CherryPy, nó được thực hiện trong môi trường đa luồng.

Cả cherrypy.request và cherrypy.response đều là vùng chứa dữ liệu luồng, ngụ ý rằng ứng dụng của bạn gọi chúng một cách độc lập bằng cách biết yêu cầu nào được ủy quyền thông qua chúng trong thời gian chạy.

Các máy chủ ứng dụng sử dụng mô hình luồng không được đánh giá cao vì việc sử dụng luồng được coi là làm tăng khả năng xảy ra sự cố do yêu cầu đồng bộ hóa.

Các lựa chọn thay thế khác bao gồm:

Mẫu đa quy trình

Mỗi yêu cầu được xử lý bởi quy trình Python của riêng nó. Ở đây, hiệu suất và độ ổn định của máy chủ có thể được coi là tốt hơn.

Mẫu không đồng bộ

Ở đây, việc chấp nhận các kết nối mới và gửi dữ liệu trở lại máy khách được thực hiện không đồng bộ từ quy trình yêu cầu. Kỹ thuật này được biết đến với hiệu quả của nó.

Điều phối URL

Cộng đồng CherryPy muốn linh hoạt hơn và các giải pháp khác dành cho người điều phối sẽ được đánh giá cao. CherryPy 3 cung cấp các trình điều phối tích hợp sẵn khác và cung cấp một cách đơn giản để viết và sử dụng điều phối viên của riêng bạn.

  • Các ứng dụng được sử dụng để phát triển các phương thức HTTP. (GET, POST, PUT, v.v.)
  • Công cụ xác định các tuyến trong URL - Routes Dispatcher

Bộ điều phối phương thức HTTP

Trong một số ứng dụng, URI độc lập với hành động, được thực hiện bởi máy chủ trên tài nguyên.

Ví dụ,http://xyz.com/album/delete/10

URI chứa hoạt động mà khách hàng muốn thực hiện.

Theo mặc định, bộ điều phối CherryPy sẽ ánh xạ theo cách sau:

album.delete(12)

Người điều phối được đề cập ở trên được đề cập chính xác, nhưng có thể được thực hiện độc lập theo cách sau:

http://xyz.com/album/10

Người dùng có thể tự hỏi làm thế nào máy chủ gửi trang chính xác. Thông tin này được mang bởi chính yêu cầu HTTP. Khi có yêu cầu từ máy khách đến máy chủ, CherryPy trông là trình xử lý phù hợp nhất, trình xử lý là đại diện của tài nguyên được nhắm mục tiêu bởi URI.

DELETE /album/12 HTTP/1.1

Điều phối viên định tuyến

Đây là danh sách các tham số cho phương thức được yêu cầu trong điều phối -

  • Tham số tên là tên duy nhất cho tuyến đường để kết nối.

  • Tuyến đường là mẫu để khớp với các URI.

  • Bộ điều khiển là thể hiện chứa các trình xử lý trang.

  • Sử dụng trình điều phối tuyến đường kết nối một mẫu phù hợp với URI và liên kết trình xử lý trang cụ thể.

Thí dụ

Hãy để chúng tôi lấy một ví dụ để hiểu cách nó hoạt động -

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

Thực hiện theo các bước dưới đây để nhận đầu ra của mã trên -

Step 1 - Lưu tệp đã đề cập ở trên với tên tutRoutes.py.

Step 2 - Truy cập URL sau -

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

Step 3 - Bạn sẽ nhận được kết quả sau -