Nasıl PHP'nin p * yöntemleri işe bağlayabilirim?

4 Cevap php

Benim anlayış PHP'nin p * bağlantıları (o vb memcache, ya da bir yuva olacak) servise sayfa yüklemeleri arasında kalıcı bir bağlantı tutar olmasıdır. Ama bu bağlantılar parçacığı güvenli mi? Iki sayfa aynı anda aynı bağlantı erişmeye çalıştığınızda ne olur?

4 Cevap

Tipik unix dağıtımında, PHP sırayla kökenli çocukların bir dizi birine HTTP istekleri göndermek için yapılandırılmış Apache web sunucusu, içinde çalışan bir modül olarak yüklenir.

Verimlilik uğruna, apache sıklıkla (bunları ön çatallamalı) vaktinden önce bu süreçleri spawn ve onları korumak, onlar daha bir istek gönderebilir böylece, ve gelen her istek için bir süreci başlatma yükü kurtaracak .

PHP temiz bir çevre ile her isteğini başlayan prensibine göre çalışır; no script değişkenler sayfa yükleri arasında devam etmektedir. (Mod_perl veya Python, beklenmedik durum akşamdan kalma nedeniyle uygulamalar genellikle apaçık ince hata ile kontrast).

Bu bir PHP komut dosyası tarafından tahsis tipik bir kaynaktır, GD veya bir veritabanı bağlantısı için bir resim kolu olması demektir, bir isteğin sonunda çıkacak.

Bazı kaynaklar, özellikle Oracle veritabanı bağlantıları, kurmak oldukça yüksek bir maliyeti var, bu yüzden bu şekilde sevk web istekleri arasındaki bağlantıyı önbelleğe arzu edilir.

Kalıcı özkaynakları girin.

Yolu, bu işi herhangi bir apache çocuk süreç kaynakların bir "kalıcı listede" kayıtlanmakla bir istek kapsamı dışında bir kaynak muhafaza olmasıdır. Kalıcı liste (dahili RSHUTDOWN olarak da bilinir), istek sonunda temizlenir değil. Bir pconnect işlevini kullandığınızda, bu benzersiz kimlik bilgileri verilen bir grubu için kalıcı liste girişini bakmak ve bu dönüş, eğer varsa, ya da bu kimlik bilgileri ile yeni bir bağlantı kuracaktır.

200 çocuk süreçleri korumak için apache yapılandırılmış varsa, veritabanı makinenize web sunucusundan kurulan birçok bağlantılarını görmek için beklemek gerekir.

Birçok web sunucuları ve tek bir veritabanı makinesi varsa, veritabanı makineye beklenenden daha çok daha fazla yükleniyor sona erebilir.

Bir dişli SAPI'den ile, kalıcı listesi geçerlidir parçacığı başına korunur, bu nedenle iş parçacığı güvenli olmalı ve benzer yararları var, ama PHP ile ilgili her zamanki uyarı dişli SAPI çalıştırmak için tavsiye ediliyor değil - PHP kendini güvenli, çok iplik iken Kullandığı kütüphaneler kendi iplik güvenlik sorunları var ve baş ağrısı bir iyi bir dizi neden olabilir.

Manuelin sayfası Persistent Database Connections size kalıcı bağlantıları hakkında bilgiler bir çift alabilirsiniz.

Hala, iplik güvenliği hakkında özel bir şey söylemiyor; Ben hatırladığım kadarıyla, bu her yerde hakkında bir şey görmedim oldukça hiç, bu yüzden "sadece Tamam çalışır" varsayalım. Benim tahminim bir bağlantı olacağını, aynı zamanda başka bir iş parçacığı tarafından zaten kullanıldı değil sadece yeniden kullanılabilir, ancak (mantıksal) vahşi bir tahmin sadece bir çeşit ...

Genel olarak konuşursak, PHP sürecinin başına bir kalıcı bağlantı yapmak veya web sunucusu üzerinde çalışan iplik olacak. Bu nedenle, bir işlem veya iş parçacığı başka bir işlem veya iş parçacığı bağlantısı erişim olmayacaktır.

Bunun yerine, bir veritabanı bağlantısı yaparken PHP biri zaten açıksa (sürecinde veya sayfa isteği işleyen iplik) görmek için kontrol eder ve eğer o zaman onu kullanacak, aksi takdirde sadece yeni bir başlatmak olacaktır.

Yani soruyu cevaplamak için, onlar mutlaka parçacığı güvenli değil, çünkü onlar nasıl işlediğini iki parçacığı veya süreçler aynı bağlantı erişecek bir durum yoktur.

Bir PHP komut dosyası kalıcı bir bağlantı istediğinde Genelde, PHP aynı bağlantı parametreleri ile bağlantı havuzunda biri için bakacağız.

Bir o kullanılıyor NOT bulunursa, bu komut verilen ve komut sonunda havuza döner.