Ben gecikmeli PHP olay için bir ihtiyaç olan bir çevrimiçi PHP uygulama üzerinde çalışıyorum. Temelde keyfi PHP kodu x birçok saniye yürütmek gerekiyor (ama o gün olabilir) bir URL'ye ilk vuruşundan sonra. Ben de oldukça ölçeklenebilir olmasını istiyorum, bu PHP olayın oldukça hassas yürütme gerekir. Her saniye çalıştırmak için bir cron işi zamanlamak ihtiyacını önlemek için çalışıyorum. I Gearman içine bakıyordu, ama bu etkinlikleri planlamak ve anlıyorum gibi, PHP gerçekten bir daemon olarak çalıştırmak anlamına gelmez herhangi bir yeteneği sağlamak için görünmüyor.
It would be ideal if I could tell some external process to poll a "event checker" url on PHP server at the exact time that the next event should be run. This poll time will need to be able to decreased or increased at will since event can be removed and added to the queue and. Any ideas on an elegant way to accomplish this? (HTTP isteği ayrıştırmak zorunda veya CLI üzerinden arama) benim ihtiyaçları için bu fikri uygun yapmak için dışarıdan PHP çağıran çok havai Orada sadece.
My current plan is write a PHP daemon that will run the event and interface with it from the PHP server with gearman. The PHP daemon would be build around SplMinHeap yüzden umarım performans kötü olmaz. Bu fikir ağzımda kötü bir tat bırakır ve herkes daha iyi bir fikri vardı merak ediyordum? Strike> Fikirler biraz değişti. Edit 2 okuyun.
EDIT:
Ben değişken süre ile sırayla oyuncular geliştikçe bir online oyun oluşturma. Bana benim müşterilerine ve gelen mesajları itmek için izin XMPP ve Bosh kullanıyorum, ama hepsi bitti o kısmı var ve çalışma var. Şimdi ben o uzun sürdü ki istemci (ve oyundaki diğer ppl) izin müşteriden oyundan sonra tetikleyen keyfi bir olay eklemek için çalışıyorum. (Müşteri kendileri tarafından oynayabilir beri) bu işletilebilir olurdu çünkü ben istemci tarafında zamanlanmış tetik kullanamazsınız. Umut olur.
EDIT 2:
Görüşleriniz için teşekkür ederiz. Senin fikirlerin en küçük ölçekte de işe yarayacağını düşünüyorum, ben çok iyi (dış olay yöneticisi) ölçeği değil, bir duygu var ya, bu proje gerektirir doğruluk (CRON) eksikliği. Ayrıca, bu durumlarda hem onlar başarısız ve zaten karmaşık bir sisteme karmaşıklık ekleyebilirsiniz dış parçalarıdır.
Ben şahsen bu proje için gereksinimlerini karşılayan tek clean çözüm gecikmeli olaylarını işleyen bir PHP cini yazmak olduğunu hissediyorum. Ben first PHP runloop olduğunu düşünüyorum yazmaya başladık. Bu yuva izliyor ve gecikmiş PHP olayları yürütme yönetir. Ben bu proje ile yapılıyor yakın olduğumda size herhangi ilgileniyorsanız eğer Umarım, kaynağını kadar ekleyebilirsiniz. Şimdiye kadar test o (bellek sızıntı veya istikrarsızlık ile hiçbir sorunları) çözümü umut verici olduğu gösterilmiştir.
EDIT 3: Here is a link to the PHP event loop library called LooPHP for those who are interested.
TL;DR Requirements
- Gecikmiş bir seferde (tercihen doğal) PHP arayın (saniye gün arasında değişen)
- Keyfi (I iptal çağrısı yüksek miktarda bekliyorum) olayları oluşturma / güncelleme / silme taşıyınız.
- Planlanan etkinlikler yüksek yük (100-1000 sunucu başına ikinci) Kolu
- Aramalar o zaman planlanan oluyor bir saniye içinde olmalıdır
- Bu noktada ben (belki bir gün) başka bir dilde kod tabanı yeniden açık değilim