gpt4 book ai didi

Python 在发送文件前保持 HTTP 连接?

转载 作者:可可西里 更新时间:2023-11-01 16:56:03 26 4
gpt4 key购买 nike

问题

这个问题困扰了我好久。我正在处理一个 Web API,它提供了通过某些特定条件查询数据库、取回符合条件的数据并生成一个 .xls 文件以供下载的功能。

但是数据量真的很大,所以生成.xls文件会比较费时间。 这可能会导致 HTTP 超时。我曾经创建了一个生成器来逐行生成格式为 .csv 的记录。它在性能方面效果很好(我的意思是生成和下载速度快),但是有一些副作用。正如我在前两个问题中提到的:

问题

After a serious consideration, I finally decide to generate the whole .xls file on the server side, and then provide for download. But how can I maintain the http connection during the time for generating the .xls file?

最佳答案

“如何在生成 .xls 文件期间保持 http 连接?”

简单的回答:你不能。至少您不能保证单个简单的 HTTP GET 请求(和底层 TCP 连接)可靠地工作。根据客户端的具体情况和客户端所在的网络,您的用户可能经常遇到错误(您的应用程序无法处理的连接超时)。

因此,正确的问题是:无论生成文件需要多长时间以及他们的 Internet 连接有多糟糕,您需要哪种技术才能让用户获得此文件?

有许多可能的方法,但它们都有各自的缺点。根据您要支持的浏览器,有几个选项。所有这些都需要使用客户端 JavaScript。

您可能想使用现代的 Server-Sent events ,它允许服务器主动触发浏览器中的事件,浏览器可以根据需要响应该事件。

一种更经典的方法是通过 HTTPS 进行(长)轮询,您可以像以前一样这样做,但将客户端和服务器中的超时时间配置得相当长。此外,您需要准备好 JavaScript,以便在请求超时时重复请求。此外,还建立了用于防止超时的肮脏技术。

您可能需要做一些研究,使用术语“服务器推送”、“ cometd ”、“长轮询”。这样做,您可能会阅读有关 WebSockets 的内容(我认为您并不直接需要它)。

我想如果我是你,我现在会选择使用服务器发送的事件。但您必须自己解决这个问题,具体取决于您的具体要求。

快速浏览一下,这篇文章的介绍可能是一个很好的阅读:https://jersey.java.net/documentation/latest/sse.html

另外,介绍W3C Server-Sent Events specification很好。引用:

Event streams requests can be redirected using HTTP 301 and 307 redirects as with normal HTTP requests. Clients will reconnect if the connection is closed; a client can be told to stop reconnecting using the HTTP 204 No Content response code.

Using this API rather than emulating it using XMLHttpRequest or an iframe allows the user agent to make better use of network resources in cases where the user agent implementor and the network operator are able to coordinate in advance. Amongst other benefits, this can result in significant savings in battery life on portable devices. This is discussed further in the section below on connectionless push.

关于Python 在发送文件前保持 HTTP 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com