如何在Bottle中使用CherryPy启用gzip压缩
在Bottle的官方文档中提到:
... Bottle项目建议,Gzip压缩最好由Bottle运行的WSGI服务器来处理。像cherrypy这样的WSGI服务器提供了一个叫做
GzipFilter
的中间件,可以用来实现这个功能。
目前,我是这样运行我的Bottle服务器的:
app.run(host='...', port=8080, server='cherrypy')
我该如何让cherrypy使用gzip压缩呢?
我可以这样获取cherrypy服务器对象,但我还是搞不清楚怎么启用gzip:
class CherryPyGzip(ServerAdapter):
def run(self, handler):
from cherrypy import wsgiserver
server = wsgiserver.CherryPyWSGIServer((self.host, self.port), handler)
# enable gzip here somehow?
try:
server.start()
finally:
server.stop()
app.run(host='...', port=8080, server=CherryPyGzip)
2 个回答
0
这是个大胆的猜测,因为我对CherryPy不太熟悉:把这个代码放在你写“在这里启用gzip”的那一行。
cherrypy.config.update({'tools.gzip.on': True})
(这个想法受到这篇文章的启发。)
有没有成功呢?
4
CherryPy有一个Gzip工具,但这个工具只适用于CherryPy自己开发的应用程序。所以,如果你想在其他应用中使用Gzip,就需要借助第三方的Gzip WSGI中间件(这里提到的wsgigzip只是一个例子,我并不知道哪个中间件最好用):
import cherrypy
import wsgigzip
application = wsgigzip.GzipMiddleware(bottle.default_app())
cherrypy.config.update({'server.socket_host': "0.0.0.0",
'server.socket_port': 8080})
cherrypy.tree.graft(application, "/")
cherrypy.engine.start()
cherrypy.engine.block()
更好的选择是使用uWSGI作为服务器,它除了能做gzip之外,还有很多其他很棒的功能。