2012-08-15 6 views
5

私はエネルギープロジェクトに取り組んでいます。私のサイトには、エネルギーサービスがウェブサービスを通じて登録プロセスに登録されているかもしれません。当初は1だったが、今や3つが統合された。PHPどのように複数のWebサービスを同時に実装するのですか?

最初のページでは、私は郵便番号に基づいて計画を示す必要があります。今、このページで私は4つのエネルギー提供者にエネルギー計画のリストを要求する必要があります。

一度に各サービスをリクエストするには、外部ソースからデータを取得する必要がありますが、これが最初のページであるため、最初は遅くしたくありませんインスタンスのみ。

すべてのサービスに対して同時にリクエストを行い、各サービスからデータを収集し、最終ページにリストする方法を教えてください。

+0

私は多くの人が文句を言うだろうと知っていますが、マルチスレッドについて考えましたか?最初の数少ないGoogleの検索結果から、これらは始めるのに適した場所に見えます... http://villavu.com/forum/showthread.php?t=73623 and http://blog.motane.lu/2009/01/02/multithreading-in-php/supportはスリムに見えますが、これは4回のリクエストがすべて "once"になることによってスピードアップするかもしれません - 少なくとも私が想像しているもの... – blad

+1

キャッシングはどうですか?これらのプランはどのくらいの頻度で変更されますか?それはリアルタイムでなければならないのですか?なぜ、すべてのサービスを1〜5分ごとにポーリングして結果をmemcacheまたはMySQL HEAPテーブルに格納するcronジョブを持っていないのですか?その後、フロントエンドはWebサービスの代わりにキャッシュから読み取ることができます。 – Costa

+0

@Costa良い解決策と思われます。しかし、問題は私がどれくらいの郵便番号があり、どのくらいの頻度で計画を変更するのか分からないということです。約50Kの郵便番号があるかもしれません。しかし、私はこれを念頭に置き、実現可能なところに実装します。 – Vins

答えて

3

Webサーバー上で実行しているときにPHPでこれを行う方法は、実際には1つしかありません。 PHPにコンパイルされたcURLモジュールが必要になります。並列リクエストの実行をサポートしています。使用例については、www.php.netのコメントとドキュメントを参照してください。

試してみてください。http://www.php.net/manual/en/function.curl-multi-init.php

その他のオプションは、バックグラウンドプロセスをforkまたはUNIXシェルを呼び出すように、維持するためにひどいとまれクロスプラットフォームです。マルチスレッドは、ほぼすべての一般的なPHP環境で有効なオプションではありません。

必ずしも示唆するものではありませんが、AJAXアプローチを使用することができます。すべてのケースで軽量ではありませんが、体重を測定する必要があります。

+0

私は同様の状況に対処するときに、pcntl_forkを使用して同時のWebサービス要求を実行するケーキシェルでデータを取得する作業をオフロードして解決しました。子プロセスは応答を共有メモリに保存し、すべてのプロセスが完了すると、親シェルプロセスがそれらを収集してWeb要求に返します。それは私のために大量の負荷時間を減らすために働いた。しかし、ペイズリエンスがこの解決策について語ったことを考慮に入れてください。 – Ceeram

+0

@pestilence Webサービスの呼び出しに異なる要求を使用している場合はどうなりますか? 1つはRESTを使用しています.Curlを使って3番目のSOAPを使用しています。その時、それはどのように役立ちますか..ありがとう –

関連する問題