PHP Script eşzamanlı istekleri

3 Cevap php

PHP Motor aynı komut diğer eşzamanlı tarayıcı isteklerine ne olacağını sunucuda bir komut dosyası yürütme ortasında zaten varsa?

  • Istekleri sıraya olacak?
  • Bunlar göz ardı edilecektir?
  • Will each request have its own script instance?
  • Başka bir olasılık?

3 Cevap

Sunucu, yapılandırmasına bağlı olarak, genel olarak hizmet verebilir hundreds of requests at the same time - Apache kullanması durumunda, MaxClients yapılandırma seçeneği söyleyerek biridir:

The MaxClients directive sets the limit on the number of simultaneous requests that will be served.
Any connection attempts over the MaxClients limit will normally be queued, up to a number based on the ListenBacklog directive.
Once a child process is freed at the end of a different request, the connection will then be serviced.


The fact that two clients request the same page is not a problem.

Yani:

Istekleri sıraya olacak?

No; eğer hariç:

  • Orada bazı lock yerde - ki iki istekleri aynı istemciden gelen ve kullandığınız file-based sessions in PHP eğer, örneğin, olabilir: bir komut dosyası idam edilirken, oturumu sunucu / istemci ilk istek (and the file unlocked), ikinci kullanıcı için oturum açmak için dosyayı kullanmak mümkün bitene kadar beklemek zorunda kalacak anlamına gelir, "kilitli" olduğunu.
  • istekleri aynı istemci ve aynı tarayıcı geliyor; Sunucu tarafında bu davranışı üreten bir şey olduğunda bile tarayıcıların çoğu, bu durumda istekleri sıraya.
  • MaxClients etkin işlemlerin daha vardır - hemen önce Apache kılavuzundan alıntı bakın.


Bunlar göz ardı edilecektir?

No: Bu sadece tek bir kullanıcı aynı anda bir web sitesini kullanabilirsiniz anlamına gelir; Bu, oldukça güzel olmazdı, değil mi?

If it was the case, I could not post this answer, if you where hitting F5 at the same moment to see if someone answered !
(Well, SO is not in PHP, but the principles are the same)


Başka bir olasılık?

Evet ^ ^


edit after you edited the OP and the comment :

Will each request have its own script instance?

"script instance" gibi bir şey yoktur: basitçe, ne bir komut dosyası için bir istek yapıldığında nerede oluyor olduğunu:

  • webserver çatal another process isteği işlemek için (often, for performance reasons, those forks are made in advance, but this changes nothing)
  • the process reads the PHP script from disk
    • several processes can do this at the same time, dosya okumada herhangi bir kilitleme de mevcut değildir
    • Dosya belleğe yüklenir; Her işlem için ayrı bir bellek bloğunda
  • hala bellekte - bellekte PHP dosyası "compiled" opcodes için
  • Bu opcodes yürütülür - hala isteğinizi yanıtlayan sürecine ait bellek bloğundan


Really, you can have two users sending a request to the same PHP script (or to distinct PHP scripts that all include the same PHP file) ; that's definitly not a problem, or none of the website I ever worked on would work !

2 istemcileri, aynı zamanda sunucu ararsa, sunucu büyük olasılıkla neredeyse aynı anda hem müşterilerine cevap yapabiliyor. Burada müşteriler tarayıcı düzeyinde onları tanımlamak.

Eğer aynı anda aynı web sitesi / sayfasını yüklemek için 2 tarayıcıları kullanıyorsanız aynı makinede söylemek Anlamı, ikisi aynı anda yüklü olmalıdır.

Biz PHP bahsediyoruz beri Ancak, oturumlar hakkında özel notlar almak gerekir. Sayfalarınız oturumları kullanıyorsanız, sunucu bir seferde yalnızca bir sayfa hizmet vermektedir. Bir komut dosyası çıkana kadar oturum dosyası, kilitli olacak çünkü bu.

Bu örneğe bakın. 2 dosya aynı seansta aka aynı tarayıcı aynı kullanıcı yüklenir.

      scripta.php requested                 scripta.php served
------+---+---------------------------------+------------------------>
          scripta.php started

               scriptb.php requested           scriptb.php started
---------------+-------------------------------+-----------------+--->
                                                                 scriptb.php served.

Scripta.php servis edilir sonra o scriptb.php sadece başlatılır dikkat edin. scripta.php başladı scripta.php oturum dosyası yazabilirsiniz, böylece oturum dosya diğer komut kilitli çünkü bu. Scripta.php tamamlandığında, oturum dosyası açılır ve böylece diğer komut kullanmak mümkün. Böylece scriptb.php oturumu dosya daha sonra bu oturum dosyasını kilitlemek ve onu kullanır serbest kadar bekler.

Bu süreç gecikmelere neden aynı oturum dosyaya yazma birden çok komut önlemek için tekrar devam edecektir. Böylece aramak için tavsiye edilir session_write_close () özellikle birçok iframe veya AJAX kullanarak bir web sitesinde, oturumu kullanarak artık zaman.

Eğer çok standart olmayan kurulum çalışan sürece, web sunucusu (Apache, IIS, nginx, vb) sunucuya gelen her istek için ayrı ayrı PHP çalıştırmak çoklu süreçleri olacaktır. Eşzamanlı istekleri aynı anda servis edilecektir.