codecamp

CherryPy 多线程应用程序服务器

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__':

按照下面给出的步骤获取上述代码的输出 -

Step 1 - 将上述文件另存为tutRoutes.py 。

Step 2 - 访问以下网址 -

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

Step 3 - 您将收到以下输出 -

路线调度员


CherryPy HTTP合规性
CherryPy 基本认证工具
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

CherryPy 一个工作应用程序

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }