PHPでSocketを使ったネットワークプログラミングを自作してみると、Unix系OSの非同期IO・ブロッキングIOについて理解が深まります。PHPでブロッキング、ノンブロッキングなWebサーバを書いて、Webサーバへの理解を深めましょう。
PHPͰWebαʔόΛ࡞Ζ͏PHPΧϯϑΝϨϯεԬ2017 LT*OOPWBUPS+BQBO*ODॴ྄&OHJOFFS
View Slide
͜ΜͳᷚΛฉ͍ͨ
PHPͰΣϒαʔόΛॻ͚ͳͯ͘ڐ͞ΕΔͷதֶੜ·ͰΒ͍͠Ͱ͢
Ͱ͏
PHPͰΣϒαʔόΛ࡞Δࣾձతҙٛ
ແ͍
ΤϯδχΞͱͯ͠ͷ
େ͍ʹ༗Δʂ
8αʔόͱʁ
8αʔόͱʁ1. HTTPϦΫΤετ͕དྷΔ2. HTTPϨεϙϯεΛฦ͢
)551ϦΫΤετ3'$ࢀরGET /index.html HTTP/1.1Host: localhostConnection: keep-aliveCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; ...Accept: text/html,application/xhtml+xml;q=0.9,image/webp,*/*;q=0.8DNT: 1Accept-Encoding: gzip, deflate, sdch, brAccept-Language: en-US,en;q=0.8,ja;q=0.6
)551Ϩεϙϯε3'$ࢀরHTTP/1.1 200 OKContent-Type: text/htmlCache-Control: max-age=8640000Accept-Ranges: bytesContent-Length: 197Server: OrenoWebServer/0.1
؆୯ͦ͏͡Όͳ͍͔
ޙߦͷ8αʔόര
Μʁ
Socket??
ಡΜͰ ࡶ
ߦ8αʔόϒϩοΩϯάIO + γϯάϧϓϩηεQSPDFTTͰSFRͣͭ৺ΛࠐΊͯॲཧ
ෳϦΫΤετΛॲཧ͍ͨ͠
ྫ͑"QBDIFNPE@QIQϒϩοΩϯάIO + IOଟॏԽ༧ΊϓϩηεΛGPSLͯ͠ෳSFRΛॲཧPrefork
Α͠ʂ࡞Ζ͏
͞Βʹޙߦͷِ"QBDIFര
େࣄͳτίίίQSFGPSL
*0ଟॏԽͷࢀߟࢿྉhttps://speakerdeck.com/bati11/otozhong-liang-kunaruhua
DEMOIUUQTHJUIVCDPNIBOIBOQIQDPOGVL@EFNP
1)1Ͱ8FCαʔόΛ࡞Δͱ1. HTTPϦΫΤετ͕͔Δʂ2. HTTPϨεϙϯε͕͔Δʂ3. IOͷॲཧϞσϧ͕͔Δʂ͔͠Εͳ͍ʜ