内置Http Server & 内部引擎

CherryPy自带Web(HTTP)服务器.这就是为什么CherryPy是自包含的,并且允许用户在获取库的几分钟内运行CherryPy应用程序.

web服务器充当通往应用程序,所有请求和响应都保持在跟踪状态.

要启动Web服务器,用户必须进行以下调用 :

cherryPy.server.quickstart()

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生成一个Date头字段,用于所有配置.

  • CherryPy可以在客户的支持下处理响应状态代码(100).

  • CherryPy的内置-in HTTP服务器通过使用Connection:Keep-Alive标头支持HTTP/1.1中的默认持久连接.

  • 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中路由的路由 - 路由调度程序

HTTP方法调度程序

在某些应用程序中,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

路由调度程序

以下是所需方法的参数列表发送 : 去;

  • name参数是要连接的路由的唯一名称.

  • 路由是匹配URI的模式.

  • 控制器是包含页面处理程序的实例.

  • 使用Routes调度程序连接一个匹配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 ())

按照以下步骤获取上述代码的输出 :

步骤1 : 将上述文件另存为 tutRoutes.py .

第2步 : 访问以下网址 :

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

第3步 : 您将收到以下输出 :

路线调度员