Artikel ini membawakan anda pengetahuan yang berkaitan tentang php+socket, yang terutamanya memperkenalkan pemultipleksan IO dan bagaimana php+socket melaksanakan pelayan web? Rakan-rakan yang berminat boleh lihat di bawah ini semoga bermanfaat untuk semua.
Penmultipleksan
Artikel sebelumnyaPelayan mudah -komunikasi pelanggan dilaksanakan melalui soket asli Walau bagaimanapun, apabila berbilang pelanggan disambungkan, pelayan hanya boleh mengendalikan permintaan pelanggan pertama dan tidak boleh melayani pelanggan berikutnya
Sebabnya. untuk situasi ini adalah kerana model IO menyekat dan hanya boleh diakses oleh satu pelanggan pada masa yang sama Terdapat dua penyelesaian utama untuk menyelesaikan masalah ini:danselect
Dalam perisian biasa,epoll
digunakan modelApache
,select
menggunakan modelnginx
. Terdapat modelepoll
terbina dalam php, dan fungsi yang sepadan ialahselect
Pemultipleks adalah asas untuk melaksanakan pelayan httpsocket_select
terbina dalam melaksanakan modelsocket_select
dan sintaksnya adalah seperti berikut:select
socket_select( array &$read, array &$write, array &$except, int $seconds [, int $microseconds = 0]): int|false
read
akan kembali (jika tidak, ia akan terus disekat), dan pada pada masa yang sama mengubah suai pembolehubah kepada peristiwa semasa (mesej diterima atau klien disambungkan atau diputuskan sambungan) senarai sumber soket, dan terus melaksanakan ke bawah.socket_select
write
bermakna ia tidak peduli sama ada terdapat perubahan tulisnull
except
yang masuk adalah "mendengar" Semuanull
seconds
diluluskan, ia akan menyekat, iaitu 0 dan tidak menyekat Jika >0, ia akan menjadi masa penyekatan maksimumnull
microseconds
Salin selepas log masuk
akan menyekat proses semasa apabila sumber soket dalam tatasusunansocket_select
mempunyai sambungan atau pemutusan sambungan atau penerimaan pelanggan mesej baharu, ia akan$tmp_sockets
Mengubah suai tatasusunan kepada sumber soket yang sedang aktif, dan kemudian memproses logik perniagaan dengan merentasi tatasusunan$tmp_sockets
Gunakan soket untuk laksanakan pelayan http mudah
Protokol http menentukan format data yang ditentukan berdasarkan soket, jadi kami hanya perlu menghantar data mengikut format apabila, dan penyemak imbas boleh bertindak balas kepada permintaan seperti biasasocket_write
this is php worker'; $len = strlen($output); $response = "HTTP/1.1 200 OK\r\n"; $response .= "content-type: text/html\r\n"; $response .= "server: php socket\r\n"; $response .= "Content-Length: {$len}\r\n\r\n"; $response .= $output; socket_write($sock, $response); } } }
dalam penyemak imbas Anda boleh melihat yang berikut:ip:8888
GET / HTTP/1.1 Host: 124.222.**.**:8888 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: jenkins-timestamper-offset=-28800000; _ga=GA1.1.1403944751.1652010033; _ga_2GM6102E19=GS1.1.1652802985.7.1.1652803014.0
untuk membaca kandungan fail yang ditentukan dan mengembalikannya ke penyemak imbasfile_get_content
Pembelajaran yang disyorkan: "Tutorial Video PHP》
Atas ialah kandungan terperinci Pemultipleksan IO siri PHP+Socket dan pelaksanaan pelayan web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!