词汇(Vocabulary)
CherryPy自带Web(HTTP)服务器。 这就是为什么CherryPy是自包含的,允许用户在获取库的几分钟内运行CherryPy应用程序。
web server充当应用程序的网关,在此帮助下,所有请求和响应都保持跟踪。
要启动Web服务器,用户必须进行以下调用 -
cherryPy.server.quickstart()
internal engine of CherryPy的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生成一个Date头字段,用于所有配置。
CherryPy可以在客户的支持下处理响应状态代码(100)。
CherryPy的内置HTTP服务器通过使用Connection:Keep-Alive标头支持HTTP/1.1中的默认持久连接。
CherryPy正确处理分块请求和响应。
CherryPy以两种不同的方式支持请求 - If-Modified-Since和If-Unmodified- Since headers并根据请求相应地发送响应。
CherryPy允许任何HTTP方法。
CherryPy处理客户端和服务器设置集之间的HTTP版本组合。
多线程应用程序服务器
CherryPy是基于多线程概念设计的。 每次开发人员在CherryPy命名空间中获取或设置值时,都会在多线程环境中完成。
cherrypy.request和cherrypy.response都是线程数据容器,这意味着您的应用程序通过知道在运行时通过它们代理哪个请求来独立地调用它们。
使用线程模式的应用程序服务器不被高度重视,因为线程的使用被视为增加了由于同步要求而导致问题的可能性。
其他选择包括 -
Multi-process Pattern
每个请求都由自己的Python进程处理。 在这里,可以认为服务器的性能和稳定性更好。
异步模式
在这里,接受新连接并将数据发送回客户端是从请求过程异步完成的。 该技术以其效率而着称。
URL调度
CherryPy社区希望更灵活,并且可以感谢调度员的其他解决方案。 CherryPy 3提供了其他内置调度程序,并提供了一种编写和使用自己的调度程序的简单方法。
- 用于开发HTTP方法的应用程序。 (GET,POST,PUT等)
- 定义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匹配的模式并关联特定的页面处理程序。
例子 (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 ())
按照下面给出的步骤获取上述代码的输出 -
Step 1 - 将上述文件另存为tutRoutes.py 。
Step 2 - 访问以下网址 -
http://localhost:8080/generate?length=10
Step 3 - 您将收到以下输出 -