2010-11-22 15 views
1

いいえ、私は1つの質問タイトルにどのくらい流行語を投げることができるのか見たくありません。AJAX long-polling a REST API/PHPアプリケーションでMemcached

PHPアプリケーションでいくつかのwebservicesにcURLを使用してRESTリクエストを作成しています。多くのアプリケーションがこのAPIに依存しているため、これらの要求はかなり頻繁に行われる必要があります。しかし、要求が重大な遅延(2〜5秒)があるだけで、私のアプリは痛いほど鈍く見えます。

私はMemcachedでこれらの要求をキャッシュすることを推奨していますが、アプリケーション内に現れるようなレイテンシにはまだ満足していません。

ここに私の考えがありました。私はバックグラウンドでAJAX long-pollingを実装して、ユーザーがレイテンシを完全に経験することはありません。 RESTリクエスト/ Memcacheルックアップは、設定された間隔でAJAXを通してすべて実行されます。

これは本当に新しいものです。これが最善のアプローチであるかどうかはわかりません。私が正しい道を歩んでいるなら、PHP + Apacheはこれをうまく処理できないことを知っています。しかし、PHPは私が知っている唯一の言語です。私は理想的には、PythonでTornadoのようなものを設定したいと思っていますが、今私が過剰なエンジニアリングをしているかどうかは分かりません。

ここの考えは参考になり、非常に高く評価されます。

+0

RESTリクエストとウェブサービスの距離はどのくらいですか?別の言葉では、待ち時間はネットワークによって引き起こされるか、単に残りの要求は遅くなります。 RESTリクエストのキャッシュウォームアップを検討しましたか? – ajreal

+0

@ajreal、キャッシュウォームアップとは何ですか? –

+0

ウォームアップは、一連のデータを事前ロードして、memcacheにRESTからの有効なデータが移入されるようにします。つまり、アプリケーションにどのREST URLを決定させるのではなく、これらのREST URLをプリフェッチするバックグラウンドジョブを実行できます。データベースまたはファイルを使用して、アプリケーションで実行したREST URLを追跡することができます。そのような場合には – ajreal

答えて

0

これはかなり迅速な処理でしたが、私は関連するプロセスを通じてmicrotime()をエコーアウトすることでアプリケーションをプロファイリングしました。私のcURL要求を並列化していないことが判明し、それが私が本当のヒットを取るところです。これを行うには約2秒かかります。これは、各cURL要求が連続して行われる間に非常に長い遅延が発生することを意味します。

+1

を使用してください。curl_multi_exec - http://php.net/manual/en/function.curl-multi-exec.php – ajreal

+0

@ajrealそれについてのアドバイスをありがとう。それは確かに私が使い終わったものです。 –

関連する問題