发布于 2015-09-13 08:16:05 | 140 次阅读 | 评论: 0 | 来源: PHPERZ

流(Streaming)

Piston支持流输出至客户端。不过默认情况下该功能是被禁用的,原因是:

  • Django下的流输出会中止 ConditionalGetMiddlewareCommonMiddleware

要 绕过这一点不利因素,Piston提供了两个代理中间件(“proxy middleware classes”),它们在流输出的情况下不会运行,因此不会在客户端收到数据之前 查看和截断数据。如果不使用这两个中间件,Django就会跟踪输出的内容(以计算E-Tags和Content-Length),因此会导致随后的接收 的peek内容为空。

piston.middleware 中有两个类用于替换 ConditionalGetMiddlewareCommonMiddleware

在 settings.py:

#!python

MIDDLEWARE_CLASSES = (
   # ...
    'piston.middleware.ConditionalMiddlewareCompatProxy',
    'piston.middleware.CommonMiddlewareCompatProxy',
   # ...
)

支除任何对 ConditionalGetMiddlewareCommonMiddleware 的引用,或者令这两中间件无效。 若有其他中间件需要在流输出之前查看数据,也要使用代理中间件对其进行封装,如下:

#!python

from piston.middleware import compat_middleware_factory

class MyMiddleware(...):
    ...

MyMiddlewareCompatProxy = compat_middleware_factory(MyMiddleware)

然后在setting.py设置 MyMiddlewareCompatProxy 以取代原有中间件。

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务