从非常慢的外部数据源获取大量数据

时间:2012-04-16 17:40:00

标签: php javascript jquery asynchronous queue

我需要从外部来源收到大量数据。问题是外部源发送数据非常慢。工作流程如下:

  1. 用户从app界面启动一些进程(通常是从本地xml文件中获取数据)。这是一个非常快速的过程。
  2. 之后我们需要加载与来自外部源的获取数据相关的信息(基本上它是来自xml的数据的外部统计信息)。它很慢。但是用户需要这个额外的信息才能继续工作。例如,他可以根据外部数据或其他内容执行过滤。
  3. 所以,我们需要异步进行。主要思想是在外部数据可用时显示。问题是我们如何组织这个异步过程?也许一些问题或其他什么?我们在前端使用php + mysql作为后端和jquery。 非常感谢!

2 个答案:

答案 0 :(得分:1)

您可能的两种策略是:

  1. 在后端进行流式传输,使用将大型外部资源卷入数据库或内存缓存的PHP脚本,并通过刷新该数据库行来响应新数据的周期请求或缓存到响应中。

  2. 使用this answer中解释的跨浏览器JavaScript技术,在前端进行流式传输。在Gecko和WebKit中,每次接收到新数据时都会触发XmlHttpRequest.onreadystatechange事件,从而可以将数据缓慢地传输到JavaScript运行时。在IE中,您需要使用iframe解决方法,也在上面的SO帖子中链接的Ajax Patterns article进行了解释。

答案 1 :(得分:0)

一种可能的解决方案是使用system()进行cURL调用,并将输出重定向到文件中。因此,在调用完成之前,PHP不会挂起。来自system()的PHP手册:

  

如果使用此功能启动程序,为了使其在后台继续运行,必须将程序的输出重定向到文件或其他输出流。如果不这样做将导致PHP挂起,直到程序执行结束。

这会将数据收集从用户界面中分离出来。然后,您可以通过多种方式处理收集的本地数据,例如:

  • 在GUI中使用iFrame,它会在某些时间间隔内自行刷新并从本地存储文件中获取数据(并可能将其存储在数据库或其他任何内容中),
  • 使用jQuery进行AJAX调用以获取数据并对其进行操作,
  • 使用一些在后台运行的CGI脚本并处理数据库写入并直接使用上述数据之一显示数据,
  • 我现在想不到几十个......