CherryPy自带了自己的web(HTTP)服务器。这就是为什么CherryPy是自包含的,允许用户在获得库的几分钟内运行CherryPy应用程序。
web服务器充当应用程序的网关,通过它,所有请求和响应都保持在跟踪状态。
要启动web服务器,用户必须进行以下调用−
cherryPy.server.quickstart()
CherryPy的内部引擎负责以下活动&负;
- Creation and management of request and response objects.
- Controlling and managing the CherryPy process.
CherryPy – Configuration
这个框架有自己的配置系统,允许您参数化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 Compliance
CherryPy的发展很缓慢,但它包括在HTTP/1.0的支持下编译HTTP规范,随后在HTTP/1.1的支持下传输。
CherryPy据说是有条件地符合HTTP/1.1的,因为它实现了规范的所有必须和必需级别,但不是所有应该级别。因此,CherryPy支持HTTP/1.1的以下特性−
如果客户机声称支持HTTP/1.1,则必须在使用指定协议版本发出的任何请求中发送头字段。如果不这样做,CherryPy将立即停止处理请求。
CherryPy生成一个日期头字段,用于所有配置。
CherryPy可以在客户机的支持下处理响应状态代码(100)。
CherryPy的内置HTTP服务器通过使用Connection:Keep-Alive头支持HTTP/1.1中默认的持久连接。
CherryPy处理正确的分块请求和响应。
CherryPy以两种不同的方式支持请求−If Modified Since和If Unmodified Since报头,并相应地根据请求发送响应。
CherryPy允许任何HTTP方法。
CherryPy处理客户端和服务器设置之间的HTTP版本组合。
Multithreaded Application Server
CherryPy是基于多线程概念设计的。每次开发人员获取或设置CherryPy名称空间的值时,都是在多线程环境中完成的。
cherrypy.request和cherrypy.response都是线程数据容器,这意味着您的应用程序通过知道在运行时通过它们代理哪个请求来独立调用它们。
使用线程模式的应用服务器不被高度重视,因为线程的使用被视为增加了由于同步需求而出现问题的可能性。
其他的选择包括&减;
Multi-process Pattern
每个请求都由其自己的Python进程处理。在这里,服务器的性能和稳定性可以被认为是更好的。
Asynchronous Pattern
在这里,接受新连接并将数据发送回客户端是从请求进程异步完成的。这项技术以其效率而闻名。
URL Dispatching
CherryPy社区希望更加灵活,希望为调度员提供其他解决方案。CherryPy 3提供了其他内置的调度器,并提供了一种编写和使用自己的调度器的简单方法。
- Applications used to develop HTTP methods. (GET, POST, PUT, etc.)
- The one which defines the routes in the URL – Routes Dispatcher
HTTP Method Dispatcher
在某些应用程序中,uri独立于要由服务器在资源上执行的操作。
例如,http://xyz.com/album/delete/10
URI包含客户端希望执行的操作。
默认情况下,CherryPy dispatcher将按以下方式映射−
album.delete(12)
上面提到的调度器是正确的,但是可以通过以下方式使其独立&负;
http://xyz.com/album/10
用户可能想知道服务器是如何发送精确的页面的。此信息由HTTP请求本身携带。当有从客户端到服务器的请求时,CherryPy看起来是最合适的处理程序,该处理程序是URI目标资源的表示。
DELETE /album/12 HTTP/1.1
Routes Dispatcher
以下是分派中所需方法的参数列表−
name参数是要连接的路由的唯一名称。
路由是匹配uri的模式。
控制器是包含页处理程序的实例。
使用路由分派器连接与uri匹配的模式并关联特定的页处理程序。
Example
让我们举一个例子来了解它是如何工作的;
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−访问以下URL−
http://localhost:8080/generate?length=10
步骤3−您将收到以下输出−