5

我有一个简单的 Flask 应用程序正在运行。为了发球,我使用 Tornado。启动服务器的代码如下所示:

# Run the app in server mode
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(port)
IOLoop.instance().start()

其中app是 Fl​​ask WSGI 应用程序对象 ( app = Flask(__name__))。

现在服务器用整个 JSON 答案响应每个请求,是否有(简单)返回 Gzipped 数据的方法?在 Tornado 网站上,我找到了http://www.tornadoweb.org/documentation/releases/v2.1.0.html?highlight=gzip,所以 Tornado 一定可以,但是 Flask 解决方案也很棒。

4

3 回答 3

6

正如 Nikolay 建议的那样,最简单的方法是使用 Nginx。它不会增加太多开销。

使用tornado.web.Application,您可以compress_response=True在初始化应用程序时通过。由于您使用的是 Flask,因此这是行不通的。您可以查看 Tornado 源代码,看看它在做什么,但这并不简单。

于 2012-08-08T19:49:20.693 回答
4

设置一个 nginx 只是为了进行 gzip 压缩似乎很奇怪。

现在我使用这个http://code.google.com/p/ibkon-wsgi-gzip-middleware/,很好。

于 2012-08-09T09:54:39.003 回答
3

假设你想在你的 tornado.web.RequestHandler 派生类中回复一个发布请求,在“def post(self):”中

self.set_header("Content-type", 'text/plain') # or whatever you expect
self.set_header("Content-Encoding", 'gzip')
# don't forget to import zlib
gzip_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16)
# response is the string where your response is
content = gzip_compress.compress(response) + gzip_compress.flush()
compressed_content_length = len(content)
self.set_header("Content-Length", compressed_content_length)
self.write(content)
于 2017-03-17T00:51:59.200 回答