PHP Script her 40 milisaniye yürütmek?

8 Cevap php

There is some way to execute a php script every 40 miliseconds? I don't know if cronjob is the right way, because 25 times per second require a lot of CPU.

Php Doğru dil değilse Eh, ben hangi dili kullanmalıyım?

Ben bir online oyun yapıyorum, ama ben vs, mermiler yolları hesaplamak için, karakterleri taşımak için, oyunda neler olduğunu işlemek için bir şey gerekir

8 Cevap

Eğer bir PHP komut dosyası her 40 milisaniyede çağırmak için çalışırsanız, o içerecektir:

  • Bir süreç oluşturun
  • Yük PHP
  • Senaryoyu yükleyin ve derlemek
  • Derlenmiş komut dosyasını çalıştırın
  • Süreci ve tüm bellek kaldır

Bir döngü gövdesine işinizi koyarak, ve sonra 40 milisaniye kalanını bitirmek için time_sleep_until döngünün sonunda kullanarak daha iyiyiz. Sonra bir kez PHP programı çalıştırın.

Unutmayın, bu bir bağımsız PHP bir program olması gerekir; Bir web sayfası üzerinden çalışan web sunucusu bu sayfada zaman aşımı neden, ve sonra erken Senaryonu sona erecek.

Her 40 milisaniye would etkileyici olabilir. Gerçekten 1 dakikalık sınırları çalıştığı, cron için uygun değil.

Eğer bu performans seviyesine neden ihtiyaç açıkladı Belki de, biz biraz daha iyi öneriler yapabilir.

Eğer anlamak zorunda Başka bir şey UNIX altında süreçleri oluşturmak için zaman alır - bu kez başladı ve sadece istenen faaliyeti her 40ms yaparak uzun süren bir görev için daha uygun olabilir.

Update: performansı bu tür bir online oyun için, ben ciddi bir şişman istemci masaüstünde çalışan olan düşünmeliyiz.

Bununla ben makine diline derlenen bir dil demek (not yorumlanır) ve kod toplu yalnızca paylaşılan gereken bilgilerin iletilmesi için ağını kullanarak, istemci üzerinde çalışır nerede.

Ben yorumlanmış diller daha az performans yoğun oyunlar için uygun olduğu şüphe yok ama ben sanmıyorum, kişisel deneyimlerinden, bu amaç için onlarla kurtulmak mümkün olacak.

PHP yavaş, yorumlanmış bir dildir. Açmak için bir dosya zaman neredeyse o miktarda alır. Bir PHP komut dosyası her 40 milisaniyede Rxecuting çok hızla büyük bir kuyruğa ve çökmesine neden olur. Bu definitely için PHP kullanmak istemediğiniz bir görev gibi geliyor, ama bir cini ya da diğer hızlı, derlenmiş ikili. Ne yapmak için arıyoruz?

Bildiğim kadarıyla bir cronjob sadece her dakika idam edilebilir. O zaman mümkün küçük miktarda bulunuyor. Eğer yürütme zaman böyle küçük bir miktar gerekir neden sol merak ediyorum?

Eğer gerçekten PHP olmak istiyorsanız, ben bunu her zaman / kapama yerine açılış, deamon bir tür olarak, bir kabuk ile çalışan süreci tutmak gerekir sanırım.

Ben bunu nasıl bilmiyorum ama en azından bu yazı bazı ilham alabilirsiniz sanırım:

http://kevin.vanzonneveld.net/techblog/article/create%5Fdaemons%5Fin%5Fphp/

Herkes yeni bir süreç başlıyor, söylediği gibi her 40ms iyi bir fikir gibi gelmiyor. Bu yapmanız için çalışıyoruz bilmek ilginç olurdu. Nedense bir yürütme fazla 40ms alırsa ne yapmak istiyorsun? Şimdi dikkatli iseniz birbirlerinin ayak üzerinde eşzamanlı Adımlara çalışan işlemlerin çok alabilirsiniz.

Yapmanız çalışıyoruz ne çok bağlı olacak, ama iş parçacığı desteği ile bir dil seçti gerektiğini hangi dili böylece yeni bir süreç her zaman ödemek zorunda değilsiniz. Java, Python uygun olabilir.

Ben arka uç iş veritabanı sorgularını gibi şeylerle uğraşmak zorunda ise her 40 MS gerçekçi olduğunu pek emin değilim. Muhtemelen daha iyi sistem koşullara adapte olmak için bir çıkış yolu çalışma ve oldukça saat gibi her 40 MS'den, hard saniyede N kez çalıştırmak için çalışıyoruz yapmak istiyorum. Yine, bu perde arkasında gerçekleştirmek için gereken ne karmaşıklığına bağlıdır.

PHP ile muhtemelen bunu yazmak için en iyi dil değildir. Bu çeşitli nedenlerden için:

  • PHP sürümüne bağlı olarak, çöp toplama kırılmış olabilir. Eğer artalan süreci, hafıza N kez ikinci sızıntı riski çalıştırın.

  • Detaylı olarak diğer nedenler this answer.

C veya Python kullanarak deneyin ve her yineleme ne kadar sürer takip. Bu hangisi büyükse N kez ikinci çalıştırmak için bir 'iyi çabayı', ya da her 40 MS, yapmanıza olanak sağlar. Bu süreç sürekli onu bitirir her zaman beri çalışan önler, yeniden başlamak için onun zaten geç.

Yine, ben bu yüzden benim cevap veya tam geçerli olmayabilir .. bu görevleri bir 'en kötü durum' senaryosu sistem yüküne almalıdır ne kadar emin değilim. Ne olursa olsun, ben PHP tek başına bir cini yazmak değil tavsiye.

PHP, bu iş için yanlış dildir. Eğer bir tarayıcı bu hızlı güncellenmesi bir şey yapmak istiyorsanız, JavaScript kullanmak gerekir. PHP sadece PHP her şeyi yapar tarayıcı sunucudan göndermek ve daha sonra işlenecek anlamına gelir arkaplanı içindir.