【问题标题】:Compress the streamed output with cherrypy用cherrypy压缩流输出
【发布时间】:2015-12-30 07:17:30
【问题描述】:

我正在将cherrypy 用于能够流式传输某些方法的输出的Web 服务器。 服务器使用yield 发送数据行,客户端使用$.ajax 方法的onprogress 事件。
但是启用cherrypy的'tools.gzip'配置会导致输出不被客户端缓存。实际上,除非服务器方法完全完成,否则不会调用客户端的onprogress 事件。似乎cherrypy压缩工具无法在流模式下压缩输出(只有在完全获取输出时才能压缩输出)。
现在我的第一个问题是如何解决这个问题。如果它无法修复,我的第二个问题是如何禁用特定方法的樱桃压缩。

【问题讨论】:

    标签: python ajax gzip cherrypy http-streaming


    【解决方案1】:

    您必须启用请求的流式传输功能。

    设置如下配置:

    {'response.stream': True}

    gzip 工具检查当前请求并查找 stream 并做出相应的响应。

    欲了解更多信息:http://docs.cherrypy.org/en/latest/advanced.html#streaming-the-response-body

    【讨论】:

    • 请求已使用response.stream 配置进行流式传输。问题在于结合流和 gzip 功能。
    • 你是对的。显然 gzip 工具不支持流式传输。明天早上我会详细介绍。
    • 在对 gzip 工具进行了一些检查之后,它似乎确实可以与流媒体一起使用。它返回一个生成器。尝试启用调试并查看日志中是否有有用的信息。 tools.gzip.debug: True
    • 我很确定它不工作!我检查源代码。在位于encoding.py 文件的compress 方法中,有一个for 循环,它使用zobj 逐行压缩正文并产生压缩的每一行。在循环之后产生zobj.flush()。跟踪代码,我发现for 中的yield 返回一个空字符串!但是for 的收益会立即返回整个数据!换句话说,实际上您提到的生成器无法按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2016-03-17
    • 1970-01-01
    • 2014-03-31
    • 2021-01-19
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多