Pemultipleksan IO siri PHP+Socket dan pelaksanaan pelayan web

藏色散人
Lepaskan: 2023-04-11 10:20:01
ke hadapan
3920 orang telah melayarinya

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.

Pemultipleksan IO soket asli PHP dan pelaksanaan pelayan web

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

Pemultipleksan IO siri PHP+Socket dan pelaksanaan pelayan web

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:

  • Berbilang proses, iaitu. ialah, pelbagai proses dimulakan pada pelayan untuk memantau

  • mekanisme pemultipleksan IO, yang hanya melaksanakan penggunaan pelanggan N Satu kabel rangkaian mengakses secara serentak

. Pemultipleksan serentak dibahagikan kepada dua model berbeza, iaitu

danselectDalam perisian biasa,epolldigunakan modelApache,selectmenggunakan modelnginx. Terdapat modelepollterbina dalam php, dan fungsi yang sepadan ialahselectPemultipleks adalah asas untuk melaksanakan pelayan httpsocket_select

Sintaks

Dalam artikel sebelumnya, kami memperkenalkan. soket asli php Fungsi

terbina dalam melaksanakan modelsocket_selectdan sintaksnya adalah seperti berikut:select

socket_select( array &$read, array &$write, array &$except, int $seconds [, int $microseconds = 0]): int|false
Salin selepas log masuk
Parameter

  • read

    Pelayan Apabila sumber soket yang dipantau berubah (iaitu, mesej baharu diterima atau pelanggan disambungkan atau diputuskan sambungan), fungsi

    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

    memantau sama ada pelanggan menulis data dengan menghantar

    bermakna ia tidak peduli sama ada terdapat perubahan tulisnull

    .
  • except

    Elemen yang akan dikecualikan dalam soket,

    yang masuk adalah "mendengar" Semuanull

  • seconds

    Saat dan mikrosaat bersama-sama membentuk parameter tamat masa. Jika

    diluluskan, ia akan menyekat, iaitu 0 dan tidak menyekat Jika >0, ia akan menjadi masa penyekatan maksimumnull

  • microseconds

Pengoptimuman

Dalam

artikel lepaskami hanya melaksanakan sambungan antara pemantauan pelayan soket dan klien Seterusnya, kami mengoptimumkan kod melalui pemultipleksan pada kod pemantauan pelayan :


        
Salin selepas log masuk
Dalam contoh ini, fungsi

akan menyekat proses semasa apabila sumber soket dalam tatasusunansocket_selectmempunyai sambungan atau pemutusan sambungan atau penerimaan pelanggan mesej baharu, ia akan$tmp_socketsMengubah suai tatasusunan kepada sumber soket yang sedang aktif, dan kemudian memproses logik perniagaan dengan merentasi tatasusunan$tmp_sockets

Pemultipleksan IO siri PHP+Socket dan pelaksanaan pelayan web

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); } } }
Salin selepas log masuk
dalam perkhidmatan Jalankan contoh ini pada klien, dan kemudian akses

dalam penyemak imbas Anda boleh melihat yang berikut:ip:8888

Pemultipleksan IO siri PHP+Socket dan pelaksanaan pelayan web

. Pada masa yang sama, pelayan akan mengeluarkan kandungan berikut:

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
Salin selepas log masuk
Kandungan ini ialah data asal yang diminta oleh pengguna Data ini boleh dihuraikan dan dibalas mengikut permintaan Contohnya, gunakan

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!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!