Uyku fonksiyonu sunucu kaynaklarını kullanır?

3 Cevap php

İlk, onlar bize sonra otomatik olarak bir müşteri için 20 dakika bir onay e-posta göndermek için: Ben bir uyku fonksiyonu kullanmak için iki nedeni var. Ben tam 20 dakika olmak istiyorum (ve benim web sunucusu bir cron işi ..... yeni bir e-posta her 20 dakikada başlatılan bana bana e-posta gönderme bıktım çünkü ben cron işleri kullanmak istemiyorum! )

İkinci sebep: Ben uyku fonksiyonunu kullanarak toplu e-postalar göndererek insan duydum. Benim sunucu yalnızca 100 e-postaları bir saat sağlayacak beri, ben aldım yerden devam sonra bir saat için komut bir uyku için uyku fonksiyonunu kullanmak istiyorum.

Benim soru budur: sunucu kaynaklarını kullanır? Bir şeyleri yavaşlatacak mı? Uyku fonksiyonunu kullanarak herhangi başka sorunlar var mı? Şimdiden teşekkürler!

3 Cevap

Bir süreç iken sleep CPU zamanı tüketmek olmaz ing, ancak süreç 'set çalışma hala bu süreci desteklemek için fiziksel bellek ve / veya disk belleği dosyası gerektirir. Diğer bir deyişle, PHP yorumlayıcı süreci çalışmasını sağlamak gerekiyor. Bu yüzden uzun sunucu yeterince RAM olduğu gibi bu bir sorun olsa olmamalı.

E-posta teslimat süreleri oldukça değişkendir, bu nedenle olursa olsun ne, tam olarak 20 dakikada birinin doğuştan bir e-posta almak için gitmiyoruz.

E-posta gönderme işlemek için - CLI başlattı, yerine apache - I uzun süren bir arka plan komut dosyası kullanabilirsiniz. Benim uygulama bir kuyruk tabloya e-postaları döker, hangi mailler komut yoklamaları her 15 saniye. Bu anketler arasında () s uyku. Bu şekilde, ben sadece bir script SMTP sunucusuna bağlanmaya çalışıyor ve uyku var.

App o kısmı son 2 yıldır hiçbir önemli sorunları ile başarıyla yürütüyor. Tek sıkıntı betik çalışmaya tutuyor - bu herhangi bir nedenle aşağı giderse eğer geri getirmek til, posta dışarı gitmez. Ama en kötü durum, sadece, örneğin, periyodik cron yoluyla yeniden olabilir günlük.

Senin sorunun çözümüne olsaydı, ben sadece bu e-postalar için bir "zaman Gönder" kuyruk masaya sütun, ve tarih 20 dakika koymak istiyorum. Mailler olacağını daha sonra SELECT * FROM mail_queue WHERE send_time <= NOW()

Alternatif olarak, beanstalkd gibi gerçek jobqueue kullanabilirsiniz. Benim uygulama yığın basit tutmak için sadece kuyruk masa seçti.

sleep();

Evet, uyku sunucu kaynaklarını kullanıyor.

Evet, uyku ayarlanan zaman (...) şeyleri yavaşlatmak.

"Uyku" kullanırken herhangi başka bir sorun vardır.

this page diyor birisi

Remember that sleep() means "Let PHP time to do some other stuff". That means that sleep() can be interrupted by signals. That is important if you work with pcntl_signal() and friends.