2017-09-26 104 views
0

我有一个为我提供XML提要的资源列表。我需要遍历它们并相应地更新数据库。同时加载多个网址

所以,想象一下,我们有100个网址。我需要同时开始从他们那里获取XML,然后,在一段时间之后,所有XML馈送的解析将完成,并且我需要赶上这一刻,以便更新“上次刷新时间”。

我用simplexml_load_url解析XML的目的。

他们最重要的是时间的问题,我想取个XML一个接一个,并花了大约50秒20页的URL。

我该如何做到这一点?网址数量可能在300-500个左右。

感谢

+0

为什么不只是建立在你的循环(?)开始的数组和缓存的唯一标识符的每一行,当您去。然后,所有的解析都完成之后,只需运行像'UPDATE表SET lastModfied =“some_datetime” WHERE unique_identifier IN(列表,标识符);' – GentlemanMax

+0

上次更改时间应该是当时所有300-500网址更新后。这不是每个网址的时间,而是“嘿,300个网址在15:03更新”。最重要的是如何同时获取数据,使其并行 – Victor

+0

正确的,这是我的建议。 'PHP'不支持异步任务,所以实际上同时解析所有文件是不能以某种方式触发每个解析操作作为单独请求的。 – GentlemanMax

回答

0

看看GuzzleHttp,可以做的并发文件处理。如果它适合您的情况,效率更高,速度更快。

+0

噢,可能这就是我需要的。我也有一个建议,使用一种叫做卷曲的东西,但不确定。 Guzzle默认包含在Laravel中。请稍后再看看,并告诉你结果,谢谢:) – Victor

+0

请看看https://stackoverflow.com/questions/46452555/what-is-exactly-concurrency-in-guzzle请,如果你可以。我尝试使用guzzle,有很多文章用很多方法来处理它,不知道我是否理解Pool和“Promise \ settle($ promises) - > wait();”之间的区别。我决定用池,现在用它玩,它的速度更快,然后使用使用simplexml_load_file,虽然我还没有解析的XML本身... – Victor

+0

我会建议使用的承诺,因为它是异步的,可能做的伎俩,以减少你的总处理时间。 – Andy