Zamanı sınırlamaları önlemek için PHP Multithreaded Programlama

4 Cevap php

PHP okuyuculu değil varlık hakkında biliyorum ama bu konuda bir arkadaş ile konuştuk: i PHP ile çözmek istediğiniz büyük bir algoritmik problemi varsa sadece "curl_multi_xxx" arayüzünü kullanarak ve aynı n HTTP isteklerini başlatmak için çözüm değil sunucu. Bu i PHP tarzı çoklu derim.

Tipik webserver ortamında bu herhangi bir sorun var mı? "Curl_multi_exec" bekliyor usta isteği maksimum çalışma zamanı veya hafıza uzunluğu karşı her zaman saymak gerekir.

Ben her yerde PHP için çok kısıtlayıcı yönetici ayarları tarafından öldürülen bir komut dosyası önlemek için bir çözüm olarak tanıtılan bu görmedim.

I popüler PHP sistemine bir özellik olarak bu eklerseniz bu hack için intikam almak için bir Rus mafya tetikçi işe sunucu yöneticileri olacak?

4 Cevap

If i add this as a feature into a popular PHP system will there be server admins hiring a russian mafia hitman to get revenge for this hack?

Hayır ama yine de PHP web sayfalarını işlemek gerekiyordu dışında başka bir nedenle kötü bir fikir. Büyük algoritmaları çalıştırmak değil. Ben insanların ASP.Net her zaman bunu yapmak için çalışıyor bakın. Iki uygun çözümler vardır.

  1. Have your PHP script spawn a process that runs independently of the web server and updates a common data store (probably a database) with information about the progress of the task that your PHP scripts can access.
  2. Have a constantly running daemon that checks for jobs in a common data store that the PHP scripts can issue jobs to and view the progress on currently running jobs.

Curl kullanarak, karışımı içine bir ağ zaman aşımı bağımlılık ekliyoruz. İdeal zaman aşımı sorunları önlemek için komut satırından her şeyi çalışır.

PHP does support forking (pcntl_fork). You can fork some processes and then monitor them with something like pcntl_waitpid. You end up with one "parent" process to monitor the children it spanned. Keep in mind that while one process can startup, load everything, then fork, you can't share things like database connections. So each forked process should establish it's own. I've used forking for up 50 processes.

Çatallaşma senin PHP yüklemek için mevcut değilse Spencer belirtildiği gibi, bir işlem spawn olabilir. Sadece o ana komut işlenmesini durmuyor böyle bir şekilde işlem spawn emin olun. Ayrıca olurken süreçleri izleyebilirsiniz böylece süreç kimliği almak istiyorum.

exec("nohup /path/to/php.script > /dev/null 2>&1 & echo $!", $output);
$pid = $output[0];

Ayrıca proses bir web sayfası başladı ve hemen geri kontrol almak yumurtlamaya yukarıdaki exec () kurulum kullanabilirsiniz.

Meraktan - başarmak için çalışırken sizin "geniş algoritmik sorunu" nedir?

Bunu hizmetine erişimi ziyade paketini kendisi satmak sonra, bir Amazon EC2 hizmeti olarak yazmak daha iyi olabilir.

Edit: Şimdi "toplu e-postalar" söz. Bunu yapmak hizmetler genellikle "spam" olarak bilinen konum, zaten vardır. Lütfen yapma.

Lothar,

Bildiğim kadarıyla, php onun concorrent gibi, hizmetleri ile çalışmak yok, bu yüzden size sürekli geçmiş zaman kontrol etmek sürecini kesintiye sürece kadar zaman geçti bilmek php için bir yol yok .. Yani, imo, hayır, php bunu yapamam :)