2017-09-26 1 views
0

XMLフィードを提供するリソースのリストがあります。私はそれらをループし、それに応じてデータベースを更新する必要があります。複数のURLを同時にロードする

URLが100個あるとします。私は同時にそれらからXMLを取り出す必要があります。その後、しばらくしてから、すべてのXMLフィードの解析が完了し、「最後に更新された時間」を更新するためにこの瞬間を把握する必要があります。

XMLを解析する目的でsimplexml_load_urlを使用します。

最も重要なのは時間の問題ですが、XMLを1つずつ取得しようとしましたが、20個のURLに対して約50秒かかりました。

どうすればこの問題を解決できますか? URLの数は約300〜500である可能性があります。

おかげ

+0

ループ(?)の先頭に配列を作成し、行ごとに一意の識別子をキャッシュするのはなぜでしょうか。その後、すべてのパーズが完了したら 'UPDATE table SET lastModfied = 'some_datetime' WHERE unique_identifier IN(list、of、ide​​ntifiers); ' – GentlemanMax

+0

LastModifiedはすべての300-500のURLが更新された後の時刻でなければなりません。それは各URLの時間ではなく、 "ねえ、300 URLは15:03に更新されました"。最も重要なのは、同時にデータをフェッチする方法です。一種のパラレルにします。 – Victor

+0

私の提案がそうするでしょう。 'PHP'は非同期タスクをサポートしていないので、実際にすべてのファイルを同時に解析することは、別々の要求として各解析オペレーションを何らかの方法で起動しなければ何もできません。 – GentlemanMax

答えて

0

は、ファイルの同時処理を行うことができますGuzzleHttpを見てみましょう。あなたのケースに合っていれば、はるかに効率的で速くなります。

+0

ああ、おそらく私が必要なものです。私はまた転がりカールと呼ばれるものを使用するための助言を得ましたが、それについてはわかりません。 GuzzleはデフォルトでLaravelに含まれています。すぐに見て、結果を教えていただきます、ありがとう:) – Victor

+0

見てみましょうhttps://stackoverflow.com/questions/46452555/what-is-exactly-concurrency-in-guzzleできれば、してください。私はグズルを使ってみましたが、それを扱う方法がたくさんある記事がたくさんあります。私はプールと "Promise \ settle($ promises) - > wait();の違いを理解していません。私はプールを使用することにしました。今はXMLを解析していませんが、simplexml_load_fileを使用する方が高速です。 – Victor

+0

プロキシを非同期で使用することをお勧めします。 。 – Andy

関連する問題