SORU
13 Mayıs 2009, ÇARŞAMBA


Çalışma PHP Görev Uyumsuz

Biraz büyük bir web uygulaması üzerinde çalışıyorum, ve arka uç çoğunlukla PHP. Bazı görevi tamamlamak için gereken kodu vardır, ancak kullanıcı sonucu bekletmek istemiyorum. Yeni bir hesap oluştururken, örneğin, onlara bir hoş geldiniz e-posta göndermek istiyorum. Ama ne zaman düştükleri 'Son Kayıt' düğmesine istemiyorum onları beklemek kadar e-posta olarak gönderilen, ben sadece işlemi başlatmak için, ve dönüş mesajı için Kullanıcı hemen.

Şimdiye kadar, bazı yerlerde exec ile kesmek gibi bir his kullanıyorum(). Temelde şeyler yapıyor gibi:

exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");

Çalışmak için görünür, ama eğer daha iyi bir yolu varsa merak ediyorum. MySQL bir tabloda görevler, ve bu tablo, ikinci bir kez sorgulayan uzun süren ayrı bir PHP komut kuyrukları ve bulduğu tüm yeni görevler yürüten bir sistem yazmayı düşünüyorum. Bu da eğer ihtiyacım olursa ileride birkaç çalışan makineler arasında görevleri bana split izin vermek gibi bir avantajı var.

Yeniden icat tekerlek mıyım? Orada exec daha iyi bir çözüm() kesmek veya MySQL sıra?

CEVAP
13 Mayıs 2009, ÇARŞAMBA


Ben de kullandım, sıralama yaklaşımı ve bu işleri de yapabilirsiniz erteleme işleme kadar sunucu yük boş, icar, yönetmek yükünüzü oldukça etkili eğer bölüm dışı "görevleri olan değil acil" kolayca.

Kendi de zor değil çalışırken, burada kontrol etmek için birkaç seçenek daha var:

  • GearMan - Bu cevap sonra GearMan popüler bir seçenek, aşağıda yorumlara bakın görünüyor beri 2009 ve yazılmıştır.
  • Eğer tam gaz açık kaynak kodlu bir ileti sırası istiyorsanız ActiveMQ.
  • ZeroMQ - Bu çok fazla soket programlama kendisi hakkında endişelenmenize gerek kalmadan dağıtılmış kod yazmak için yapar oldukça serin bir yuva kütüphane. Mesaj tek bir ana bilgisayar üzerinde sıralama için kullanabilirsiniz - sadece bir Web-app sürekli konsol çalışan bir sonraki uygun fırsatta tutuşturacak bir sıraya bir şey itmek zorunda kalacak
  • beanstalkd - bu cevabı yazarken sadece bu bir tane buldum, ama ilginç görünüyor
  • dropr PHP tabanlı bir ileti sırası projedir, ama aktif olarak Eylül 2010'dan bu yana tutulan olmamıştır
  • Son olarak, bir blog memcached for message queuing kullanma hakkında bir yazı

Bir başka, belki de daha basit bir yaklaşım kullanın ignore_user_abort - Bir kere gönderilen sayfaya kullanıcı, sen-ebilmek yapmak senin son işlem korkmadan erken sonlandırma, ama bu var etkisi görünen uzatmak sayfası yükleme, kullanıcı bakış açısı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Tech4Geeks

    Tech4Geeks

    8 Ocak 2012
  • thenewboston

    thenewboston

    4 ŞUBAT 2008
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011