Django返回http早期刷新(分块响应)

问题描述 投票:4回答:4

我有一种算法,等待将近5秒钟才能生成响应,我想在用户发送请求以告知他已收到他的请求后立即向用户发送一个ack(http 200),并等待5秒钟。 >

生成器功能:

def chunked_res():
    yield "Chunk 1"

    stop = time.time() + 5    # wait for 5 seconds
    while time.time() < stop:
        pass

    yield "Chunk 2"

在某些情况下:

response = HttpResponse ( chunked_res() )
response['Connection'] = 'close'
response['Transfer-Encoding'] = 'chunked'
response['status'] = 200
return response

浏览器中的响应:

“传输编码:分块\ n状态:200 \ n连接:close \ n内容类型:text / html; charset = utf-8 \ n \ nChunk 1Chunk 2”

问题:

5秒钟后,我得到要求的响应(块1,块2)。我想先发送“ Chunk 1”,然后在5秒钟后发送“ Chunk 2”(更新重新放置)。是否有任何特定的设置/更改来实现?

更新:

Django = 1.4python = 2.7

我有一个等待将近5秒钟才能生成响应的算法,我想在用户发送请求以告知他已收到他的请求后立即向用户发送一个ack(http 200),并且...

python django http chunked-encoding http-chunked
4个回答
2
投票

您真的想避免这样做...

stop = time.time() + 5    # wait for 5 seconds
while time.time() < stop:
    pass

2
投票

他们刚刚在django 1.5中添加了StreamingHttpResponse,而在早期版本(<= 1.4)中则添加了passing an iterator,您可以流式传输(或“块”式)数据。


2
投票

实际上,解决方案是使第一个块大小至少为1024个字符,以供浏览器递增显示。


0
投票

仅说明其他答案:对于Django 1.5+,您必须

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.