Saya telah menyemak hubungan antara fastcgi dan php-fpm dalam talian selama hampir seminggu. , pada dasarnya saya membacanya berulang kali, dan terdapat pendapat yang sangat berbeza, dan tidak ada definisi yang berwibawa.
Sesetengah orang di Internet mengatakan bahawa fastcgi ialah protokol, dan php-fpm melaksanakan protokol ini; fpm ialah pengurus proses Fastcgi, digunakan untuk menguruskan proses fastcgi; Ada yang mengatakan bahawa selepas mengubah suai fail konfigurasi php.ini, tiada cara untuk memulakan semula dengan lancar, jadi php-fpm dilahirkan; , maka mengapa mencipta php-fpm?
- Pertama sekali, apakah itu CGI?
- CGI adalah untuk memastikan data yang dihantar oleh pelayan web berada dalam format standard, menjadikannya mudah untuk penulis program CGI.
- Pelayan web (seperti nginx) hanyalah pengedar kandungan. Sebagai contoh, jika /index.html diminta, pelayan web akan mencari fail ini dalam sistem fail dan menghantarnya ke penyemak imbas Apa yang diedarkan di sini ialah data statik. Okay, jika permintaan sekarang untuk /index.php, mengikut fail konfigurasi, nginx tahu bahawa ini bukan fail statik dan perlu dicari oleh penghurai PHP untuk memprosesnya, maka ia hanya akan memproses permintaan dan menyerahkan ia ke parser PHP. Data apakah yang akan dihantar oleh Nginx ke parser PHP? URL mesti ada, rentetan pertanyaan mesti ada, data POST mesti ada, dan pengepala HTTP mesti ada, CGI ialah protokol yang menetapkan data yang hendak dihantar dan dalam format apa yang akan dihantar bahagian belakang untuk memproses permintaan.
- Apabila pelayan web menerima permintaan untuk /index.php, ia akan memulakan program CGI yang sepadan, iaitu penghurai PHP. Seterusnya, penghurai PHP akan menghuraikan fail php.ini, memulakan persekitaran pelaksanaan, memproses permintaan, mengembalikan hasil yang diproses dalam format yang ditentukan oleh CGI, dan keluar dari proses. Pelayan web kemudian mengembalikan hasilnya kepada penyemak imbas.
Baiklah, CGI adalah protokol dan tiada kaitan dengan proses atau apa-apa seperti itu.ialah program yang melaksanakan Fastcgi dan diterima secara rasmi oleh PHP.Jadi apakah itu PHP-FPM?
- Lalu apakah fastcgi?
Fastcgi digunakan untuk meningkatkan prestasi program CGI.- Tingkatkan prestasi, jadi apakah masalah prestasi program CGI?
"Penghurai PHP akan menghuraikan fail php.ini dan memulakan persekitaran pelaksanaan", itu sahaja. CGI standard akan melaksanakan langkah-langkah ini untuk setiap permintaan (jangan penat! Memulakan proses itu sangat memenatkan!), jadi masa untuk memproses setiap kali akan menjadi agak lama. Ini jelas tidak munasabah! Jadi bagaimanakah Fastcgi melakukannya? Pertama, Fastcgi akan memulakan induk, menghuraikan fail konfigurasi, memulakan persekitaran pelaksanaan, dan kemudian memulakan berbilang pekerja. Apabila permintaan masuk, tuan menyerahkannya kepada pekerja, yang kemudiannya boleh menerima permintaan seterusnya dengan serta-merta. Ini mengelakkan pertindihan kerja dan secara semula jadi sangat cekap. Dan apabila pekerja tidak mencukupi, tuan boleh pra-mulakan beberapa pekerja mengikut konfigurasi dan sudah tentu, apabila terdapat terlalu banyak pekerja terbiar, beberapa akan dihentikan, yang meningkatkan prestasi dan menjimatkan sumber; Ini adalah pengurusan proses fastcgi.
Seperti yang kita sedia maklum, penterjemah PHP ialah php-cgi. php-cgi hanyalah program CGI Ia hanya boleh menghuraikan permintaan dan mengembalikan hasil, tetapi tidak tahu bagaimana untuk menguruskan proses (Yang Mulia, saya benar-benar tidak boleh melakukannya!) Jadi terdapat beberapa program yang boleh menjadualkan php-cgi. proses Sebagai contoh, spawn-fcgi dipisahkan daripada lighthttpd. Nah, PHP-FPM adalah perkara yang sama Selepas tempoh pembangunan yang panjang, ia secara beransur-ansur diiktiraf oleh semua orang (anda tahu, dalam beberapa tahun kebelakangan ini, semua orang mengadu tentang kestabilan PHP-FPM yang lemah), dan ia telah menjadi. semakin popular.
Baiklah, akhirnya mari kita kembali kepada soalan di atas.
Ada yang mengatakan bahawa php-fpm ialah pengurus proses fastcgi, yang digunakan untuk menguruskan proses fastcgiSesetengah orang di Internet mengatakan bahawa fastcgi ialah protokol, dan php-fpm melaksanakan protokol ini
- Ya.
- betul. Objek pengurusan php-fpm ialah php-cgi. Tetapi tidak boleh dikatakan bahawa php-fpm adalah pengurus proses fastcgi, kerana seperti yang dinyatakan sebelum ini, fastcgi adalah protokol, dan nampaknya tiada proses sedemikian wujud Walaupun php-fpm wujud, ia tidak dapat mengurusnya (sekurang-kurangnya buat masa ini).
Sesetengah orang mengatakan bahawa php-fpm ialah tampalan untuk kernel php
- Dulunya benar. Oleh kerana php-fpm tidak disertakan dalam kernel PHP pada mulanya, untuk menggunakan fungsi ini, anda perlu mencari php-fpm yang sama dengan versi kod sumber, menampal kernel, dan kemudian menyusunnya. Kemudian, ia menjadi lebih mudah selepas kernel PHP menyepadukan PHP-FPM Hanya gunakan parameter kompilasi --enalbe-fpm.
Ada yang mengatakan bahawa selepas mengubah suai fail konfigurasi php.ini, tiada cara untuk memulakan semula dengan lancar, jadi php-fpm telah lahirYa, selepas mengubah suai php.ini, proses php-cgi tidak boleh dimulakan semula dengan lancar. Mekanisme pemprosesan php-fpm ialah pekerja baharu menggunakan konfigurasi baharu, dan pekerja sedia ada boleh berehat selepas menyelesaikan kerja di tangan Mekanisme ini digunakan untuk melicinkan peralihan.
Sesetengah orang mengatakan bahawa PHP-CGI ialah pengurus FastCGI yang disertakan dengan PHP. Jika ya, mengapa mencipta php-fpm?
Tidak. php-cgi hanyalah program yang mentafsir skrip PHP.
Pembelajaran yang disyorkan: "Tutorial Video PHP"