技术开发 频道

CherryPy入门之Web服务器篇

  四、启用多个HTTP服务器

  上面介绍了启动CherryPy内建Web服务器的方法,不过要说明的是,默认时CherryPy只会启动单个内建HTTP服务器的实例,不过,如果您需要在单个Python进程中使用不同的网络接口来运行应用程序的话,该怎么办呢?别急,CherryPy提供了一个API,通过它可以在单个进程中运行不同的HTTP服务器实例。

  首先,让我们考察一下CherryPy服务器通常是如何启动的:

 

conf = {'global': {'server.socket_port': 100100,
'
server.socket_host': 'localhost'}}
cherrypy.config.update(conf)
cherrypy.server.quickstart()

  如您所见,我们调用了该服务器的quickstart()方法,这将实例化内置的HTTP服务器,并在一个单独的线程中启动它。现在,假设我们具有这样的一个应用程序,我们希望该程序运行在不同的网络接口上,那么可以使用下列代码达此目的:

 

from cherrypy import _cpwsgi
#在192.
169.10.12接口的100100端口上创建一个服务器
s1
= _cpwsgi.CPWSGIServer()
s1.bind_addr
= ('192.169.10.12', 100100)
#在192.169.10.27接口的4700端口上创建一个服务器
s2
= _cpwsgi.CPWSGIServer()
s2.bind_addr
= ('192.169.10.27', 4700)
#通知CherryPy要启动和使用哪些服务器
cherrypy.server.httpservers
= {s1: ('192.169.10.12', 100100),
s2: ('192.169.10.27', 4700)}
cherrypy.server.start()

  如您所见,我们首先创建了两个内置HTTP服务器的实例,并分别为它们设置了捆绑地址以侦听入局的请求。接下来,我们把这两个服务器附加到CherryPy的http服务器池中,然后调用start()方法在相应的接口上启动它们。注意,我们没有调用cherrypy.config.update ,因为它会更新所有的服务器共享的全局配置设置。不过,这不是一个真正的问题,因为可以给每个内置服务器的实例设置相应的属性,因此:

 

s1.socket_port = 100100
s1.socket_host
= '192.169.10.12'
s1.socket_file = ''
s1.socket_queue_size = 5
s1.socket_timeout
= 20
s1.protocol_version
= 'HTTP/1.1'
s1.reverse_dns = False
s1.thread_pool
= 20
s1.max_request_header_size
= 500 * 1024
s1.max_request_body_size
= 100 * 1024 * 1024
s1.ssl_certificate
= None
s1.ssl_private_key
= None

  像上面这样,您可以直接配置服务器实例的设置,从而避免使用全局配置。对于同时使用HTTP和HTTPS的应用程序来说,这样技术同样适用。

  五、小结

  CherryPy是一种为Python开发人员准备的Web应用程序开发框架,通俗点说,就是一个Python程序库,它为Python开发人员提供了友好的HTTP协议接口。大家知道,HTTP可是万维网的支柱协议,而CherryPy将HTTP协议简化成Python API来供Python 开发人员使用,这极大地简化了Web开发人员对HTTP协议的操作。本文对CherryPy内建的web服务器启动方法、所支持的协议做深入的介绍,最后我们还对如何启用多个内建的Web服务器做了详细的讲解,希望本文对您的学习有所帮助。

0