【问题标题】:Prevent timeout of HTTP request with long running background work通过长时间运行的后台工作防止 HTTP 请求超时
【发布时间】:2017-01-29 15:23:01
【问题描述】:

以下情况:

我有一个网络服务器,它会在客户端请求时下载文件并用作文件缓存。

客户端请求一个文件并将文件url作为参数传递。网络服务器检查他是否缓存了文件。如果没有,则网络服务器下载文件并在下载后提供文件。

对客户端的响应必须是文件。无法通过“正在下载,请稍后再回来查看”来关闭响应,并在几分钟后打开来自客户端的第二个请求。 不,我不会切换到套接字,因为客户端不支持它。客户端必须使用 .NET WebClient.DownloadFile。

问题是,对网络服务器的 HTTP 请求在下载文件时被暂停。文件可以是任意大小,如果文件不能及时下载返回给客户端,会导致客户端请求超时取消。

我不想在客户端上设置超时,因为这太过分了。

有人知道如何解决这个问题吗?我已阅读有关 HTTP 状态 102(处理)的信息,但我不知道如何设置该状态。

我在网络服务器上使用 node.js,但对任何类型的(tcp 级别)解决方案感兴趣。

【问题讨论】:

    标签: node.js web-services http tcp


    【解决方案1】:

    Web 服务器应在从任何下载文件的任何位置收到文件内容后立即开始将文件内容传送给客户端……而不是在将任何文件发送给客户端之前下载整个文件,这浪费时间和空间。

    【讨论】:

    • 感谢您的意见,但时间和空间不是一个因素。无论如何,这些文件都会保存到磁盘上,并且客户端与文件缓存位于同一网络中,因此它们会在几秒钟内传输完毕。我需要一个不需要对文件缓存代码进行大量更改的解决方案。
    • 时间就是您的问题如果文件在几秒钟内传输并且时间不是一个因素,那么您的问题就没有什么可问的了。
    【解决方案2】:

    我解决了将下载流式传输到临时文件并将文件内容提供给请求客户端的问题。

    随着下载过程中文件的增长,使用 npm grow-file 打开临时文件并将数据通过管道传输到客户端的响应流中。

    【讨论】:

    • 您没有兴趣与我们分享此代码吗?
    • 不,我不知道。我没有要求代码,我要求提供理论输入。因此,作为回应,我已经用这个概念回答了我自己的问题,这应该会让任何感兴趣的人更进一步。
    • 其实这个问答完全没用。当试图找到某人现在需要的答案时,这只是另一个令人失望的谷歌结果。
    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 2015-01-04
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多