1

场景和问题描述:

  1. 用户请求文件到服务器
  2. 文件很大,所以需要时间来生成
  3. 客户端正在运行微调器以显示我们正在制作文件。
  4. 几分钟后,他们的代理超时,因为服务器没有响应查询(原因文件太大而无法生成)

我的理解 :

在深入研究了这种情况之后,我发现客户的代理正在超时,我无法控制它。我唯一能做的就是改变客户端请求和下载文件的逻辑。

我想到的解决方案:

解决方案 1:

  1. 用户请求文件

  2. 服务器在服务器端创建一个临时文件,并创建一个http路径如

    http:\www.mydomain.com\temp\download\files\12342323.pdf

  3. 该链接会更快地传递给客户,但它会在一定时间内保持不活动状态。

  4. 一旦链接被激活,用户点击链接。

解决方案2:

我对此了解不多,但是是否可以通过 node.js 创建套接字连接并传输文件?

笔记:

解决方案 1 是我的头等大事,过去 4 小时内没有任何咖啡。我唯一被困在知识上的是。我将如何检测该文件是在服务器端完成的,现在我的 ajax 脚本可以启用链接或下载它。

请提出一些新想法来处理这种情况。无需直接回答。我宁愿知道使用哪种设备钓鱼,然后准备好鱼。:) 干杯。

仅供参考:我目前使用 php 和 javascript 作为工具。

4

3 回答 3

3

如果文件最终总是被创建,并且问题出在客户端,您可以执行以下操作:

  1. 当用户单击下载时,您开始通过 AJAX 生成文件,并将名称存储在会话变量中,例如
  2. 在客户端,最简单的解决方案是每 X 秒轮询一次服务器,并让它简单地检查文件是否存在(通过 php),以了解它是否已经创建
  3. 完成后,使用 javascript 将用户重定向到文件的位置以使其下载。

然后你可以设置一个 cron 作业或类似的东西来删除已经下载的文件。

于 2012-09-11T22:00:49.967 回答
0

将生成文件的条件添加到队列中,然后将用户重定向到另一个页面。然后每分钟左右运行一个进程,从队列中读取并生成文件。创建文件后,通过电子邮件将链接发送给用户。

于 2012-09-11T22:00:06.503 回答
0

我们已经通过超时请求完成了它,因为我们不需要整个推送服务器。那么它是如何工作的。

您创建了一个链接和一个检查链接。然后你开始向检查链接发送请求,这给你一个文件状态。对我来说 10 秒就足够了。在服务器端,您创建一个队列,完成后它会写入标志,您检查 url 说明成功生成并为客户端提供 url 重定向到文件。就是这样。

如果您的时间限制很短,并且您想说客户端尽快准备好该文件,您可以创建一个套接字连接。而不仅仅是向客户推送请求。

于 2012-09-11T22:04:00.213 回答