2010-11-22 20 views
1

Hayır, tek bir soru başlığına kaç tane vızıltı atabileceğimi görmeye çalışmıyorum.AJAX bir REST API'sinde uzun zamandır yoklama/PHP uygulamasında Memcached

PHP uygulamamda cURL aracılığıyla REST isteklerini bazı web servislerine yapıyorum. Uygulamanın çoğu bu API'ye bağlı olduğundan, bu isteklerin oldukça sık yapılması gerekir. Bununla birlikte, isteklerim (2-5 saniye) ile ciddi bir gecikme yaşanıyor.

Memcached'de bu istekleri önbelleğe almak için bir öneri içeren bir çözümün yarısına kadar varken, uygulamada hiç görünmeyen bu tür gecikmelerden hala memnun değilim.

İşte benim düşüncem buydu: AJAX uzun yoklamayı arka planda uygulayabilirim, böylece kullanıcı gecikmeyi tam olarak deneyimlemez. REST istekleri/Memcache aramaları belli bir aralıkta AJAX yoluyla yapılacaktır.

Ama bu benim için gerçekten çok yeni ve bu en iyi yaklaşım olup olmadığından emin değilim. Ve eğer doğru yoldaysam, PHP + Apache'nin böyle bir şeyle başa çıkmayacağını biliyorum. Ama PHP bildiğim tek dildir. İdeal olarak Python'da Tornado gibi bir şey kurmayı çok isterim, ama şu anda aşırı mühendislik yaptığımdan emin değilim.

Burada herhangi bir düşünce yararlı olabilir ve çok takdir edilecektir.

+0

REST istekleri ile web servisleriniz arasındaki mesafe nedir? Başka bir kelime, gecikme ağdan kaynaklanır ya da sadece dinlenme isteği sadece yavaştır. REST istekleri için önbellek ısınmalarını düşünürdünüz mü? – ajreal

+0

@ajreal, Önbellek ısınma nedir? –

+0

Isınma, bir dizi veriyi ön yükleme yapmaktır, böylece memcache, REST'den geçerli verilerle doldurulur. Anlamı, uygulamanıza hangi REST URL'sini belirleme izni vermek yerine, bu REST URL'sini önceden almak için bir arkaplan işi çalıştırabilirsiniz. Uygulamanızda çalıştırdığınız REST URL'sini takip etmek için bir veritabanı veya dosya kullanabilirsiniz. – ajreal

cevap

0

Bu oldukça hızlı bir dönüş süresiydi, ancak geri döndüm ve ilgili süreçler boyunca microtime()'u ekleyerek uygulamamı belirledim. CURL taleplerimi paralel hale getirmediğimi ve gerçek hit'i aldığımı ortaya koyuyor. Bunu yapmak yaklaşık 2 saniye sürmektedir, bu da her cURL isteğinin art arda yapılmasına rağmen çok uzun gecikmeler anlamına gelir.

+1

Böyle bir durumda, curl_multi_exec - http://php.net/manual/en/function.curl-multi-exec.php – ajreal

+0

@ajreal kullanmayı düşünün. Gerçekten de bunu kullanarak bittim. –

İlgili konular