Web sayfasına dinamik veri sağlanması

6 Cevap

Ben her 2 saniyede bir değişen dinamik verileri görüntüleyen bir web sayfası var. Veri Oracle dahil olmak üzere çeşitli veri kaynaklarından seçilmektedir. Şu anda, sayfa her 10 saniyede yükler ve veri alır ve sayfayı görüntüler bir PHP komut dosyasını çalıştırır. Ben aynı verilere farklı bir görünüm verir diğer sayfaları var. Bu aynı sorgu onlar için de tekrar çalıştırılması anlamına gelir. Ben 10 eşzamanlı kullanıcı, her bu sayfaların 4 varsa, aniden veri alma açıkça ideal değil, 40 kez her 10 saniyede olur. Ben bu durumu iyileştirmek için bazı fikirleri var, ama ben benzer bir durumla karşı karşıya kalabilirsiniz diğer uzmanlardan bazı fikirler sormak düşündüm. Ben PHP bağlı ve benim sunucu bir Linux platformu üzerinde değilim.

Selamlar

Marius

6 Cevap

Ben yeni bir projede benzer bir sorunu vardı ve bir Memcached cini kullanarak tüm alınan veritabanı verileri önbelleğe seçti. Peki yerine veritabanını 40 kez sorgulama kez bunu sorgulamak ve daha sonra daha sonra sadece önbelleğe alınan sonuç veri getirmek için memcached daemon bir TCP / IP bağlantısı açın. PHP anlamak ve kullanımı oldukça kolay bir memcached uzantısı olduğunu unutmayın.

Eğer kullanıcıya göstermek sayfa veri her 2 saniyede bir ya da öylesine güncellemeniz gerekir ise o yerine sayfa yenilendiğinde alır her zaman HTML, CSS ve Javascript yükleme AJAX verileri yeniden iyi olabilir. Taha yukarıda istemciye sunucudan verileri 'itme' simüle etmek için bir Comet sunucusunu kullanarak bahsetti. Kolayca kendi dönebilirsiniz. Benim anlayış tüm büyük tarayıcıları ile çalışır iki ana teknik vardır:

  • Yeni veri (bu ben kullanarak sona erdi yöntemdir) göstermek için kullanılabilir bir kez AJAX isteği sadece tamamlar AJAX uzun yoklama.
  • Bir IFRAME içinde bitmeyen sayfa yükleniyor.

Yukarıdaki iki teknikleri kullanarak için mükemmel bir öğretici Mevcut olan here. Yazar ayrıca indirmek için onların kod sağlar.

Benim Comet çözümü için Apache + PHP kullanılsa da, bu tür Tornado (Python) gibi bir engellenmeyen çerçeveye geçmek için daha iyi olabilir.

Cache Birkaç saniye için memcache verileri alınır.

Apart veri yapıları ve sorgu yöntemlerini geliştirmek için gelen tüm farklı düzeylerde önbelleğe bakarak başlamak gerekir.

Eğer tarih 24x7 kadar tek bir yerel kopyasını tutmak için bir cron işi çalıştırmak istemiyorum varsayarsak ....

Bu zorlama olduğu zaman birlikte lokal verileri saklayın. Bir istek alındığında, veri bayat kabul edilir, eğer, veri getiriliyor önce muteksi yükseltmek - bu da komut önbelleği yenilemek için denemeden önce bir mutex kontrol gerektiği anlamına gelir.

Bu yüzden bir veritabanında yerel veri depolama öneririm - PHP gelişmiş dosya sematics kilitleme yok unutmayın. Bu yüzden muhtemelen kendi rulo gerekir - hiçbir engellenmeyen kilit içinde PHP mekanizması ne zaman aşımları sağlayan biri olduğunu AFAIK unutmayın.

C.

Ihtiyacına bakarak ben bir kuyruklu yıldız sunucuyu kullanmak öneririz.

Ayrıntılar için bu konuyu kontrol http://stackoverflow.com/questions/1961206/solution-for-comet-and-php/2386803#2386803

Aşağıdaki bağlantılardan birkaç örnek kontrol edebilirsiniz

APE Project

Lightstreamer

Liberator

Burada benim diğer cevap Re -

Sen tarafından muteksin sorunu önleyebilirsiniz:

Bir kontrol dosyası üzerinde mtime denetleyen bir cron'ed komut dosyası var - bu N dakikada güncelleştirilmiş olup olmadığını, yerel kopya bir koleksiyon çalıştırmak.

Web sayfası komut olarak, yerel veri bayat olup olmadığını, kontrol dosyasını güncellemek, onun verileri yenileme söyleyen bir mesaj döndürür. Yerel veri bayat değilse, bunu göstermek ve kontrol dosyasını güncellemek.

C.