这是一个一般设计问题,关于如何制作一个Web应用程序,它将接收大量上传的数据,处理它并返回结果,所有这些都没有可怕的旋转沙滩球5分钟或可能的HTTP超时
以下是要求:
到目前为止,我的解决方案是在客户端站点上有一个旋转的javascript循环,它每秒查询服务器以确定作业的整体进度。这对我来说似乎很狡猾,我对于接受这个作为最佳解决方案犹豫不决。
我正在使用perl,模板工具包和jquery,但任何使用任何Web技术的解决方案都是可以接受的。
修改的 可能的解决方案的一个示例是这个问题:How do I implement basic "Long Polling"?
答案 0 :(得分:3)
您可以使用AJAX执行此操作,但您可以通过类似COMET的实现获得更好的实时结果。我相信COMET实现是专门设计来解决一些超时限制,但我没有使用任何,所以我不能提供直接指南。
无论哪种方式,我的建议是在工作到达服务器后将工作交给另一个进程。
我为这种性质的批处理任务开发了许多不同的解决方案,我最喜欢的是将批处理工作交给另一个进程。在这样的系统中,上传页面将工作交给单独的处理器,并立即返回指示,供用户监控该过程。
批处理器可以通过以下几种方式实现:
然后,您可以为用户提供多种方法来监控流程:
批处理器可以通过多种方法传达它的状态:
将代码交给另一个流程有很多好处:
答案 1 :(得分:1)
最简单的方法是批量处理甚至流式传输作业。如果您将其视为您页面上的数据表。如果表格有>您只需一次请求所有记录即可获得100000条记录。我会这样做:
发送下载文件请求。
向处理100(任意数量)记录发送请求。
一个。流程记录。
湾保存到临时csv文件。
℃。回复状态为完整 / 未完成进程。
d。如果状态未完成,请重复第二步。
答案 2 :(得分:0)
您提到客户端不可信任,因此我建议(在客户端)每X个记录预解析文件,向每个记录子集附加校验和,然后允许客户端使用固定数量的连接通过代理上传,以便您可以更准确地监控进度。