使用长时间运行的后台工作防止HTTP请求超时

时间:2016-09-21 11:35:37

标签: node.js web-services http tcp

以下案例:

我有一个网络服务器,可以根据客户的要求下载文件,并作为文件缓存工作。

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

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

问题是,在下载文件时,对Web服务器的HTTP请求处于暂停状态。该文件可以是任意大小,如果文件无法下载并及时返回给客户端,则会导致客户端请求因超时而取消。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

Web服务器应该从下载它的任何地方开始将文件内容传送到客户端...而不是在将整个文件发送到客户端之前下载整个文件。浪费时间和空间。