4

如果我在 CherryPy 中挂载一个静态目录,如下所示:

wwwroot_config = { '/': 
                      { 'tools.staticdir.on': True, 
                        'tools.staticdir.dir': '/path/to/dir' } }

cherrypy.tree.mount(root, '/', config = wwwroot_config)

从该目录下载文件非常缓慢。

但是,如果我创建自己的 WSGI 应用程序...

self.wsgi_server = wsgiserver.CherryPyWSGIServer((self.bindaddress, self.port), self.download_file, numthreads = 1)

使用 self.download_file 包含,基本上:

return serve_file(theFile, "application/x-download", "attachment", os.path.basename(theFile), debug = True)

我的速度快了 4-5 倍。

但是,这种方式不够灵活,因为 serve_file 添加到请求的标头(例如范围标头和内容长度)不会在响应中返回 - 我必须自己做。

我能做些什么来让第一种方式更快吗?

4

1 回答 1

2

我以前也遇到过同样的问题,尽管我记得只有在 Windows 机器上。你在 Windows 上运行 CherryPy 吗?CherryPy 3.5.0 中似乎有一个错误,它为静态文件返回错误的 Content-Length 标头,这导致浏览器闲置等待更多不存在的字节。

我没有详细研究过这个问题,但您可能想检查服务器发送的 Content-Length 标头,看看它是否与静态文件的实际大小匹配。临时解决方法可能是手动设置(或删除)“before_handler”挂钩中的 Content-Length 标头。

于 2014-11-04T18:22:42.080 回答