PHPでWebサーバ作ろう

 PHPでWebサーバ作ろう

PHPでSocketを使ったネットワークプログラミングを自作してみると、Unix系OSの非同期IO・ブロッキングIOについて理解が深まります。PHPでブロッキング、ノンブロッキングなWebサーバを書いて、Webサーバへの理解を深めましょう。

F04982ad61107b5408ad139966596316?s=128

Ryo Tomidokoro

June 10, 2017
Tweet

Transcript

  1. PHPͰWebαʔόΛ࡞Ζ͏ PHPΧϯϑΝϨϯε෱Ԭ2017 LT *OOPWBUPS+BQBO*OD ෋ॴ྄ &OHJOFFS

  2. ͜ΜͳᷚΛฉ͍ͨ

  3. PHPͰ΢ΣϒαʔόΛॻ͚ͳͯ͘ڐ͞ΕΔͷ͸ தֶੜ·ͰΒ͍͠Ͱ͢

  4. Ͱ͸໰͏

  5. PHPͰ΢ΣϒαʔόΛ࡞Δࣾձతҙٛ

  6. ແ͍

  7. ΤϯδχΞͱͯ͠ͷ੒௕

  8. େ͍ʹ༗Δʂ

  9. 8&#αʔόͱ͸ʁ

  10. 8&#αʔόͱ͸ʁ 1. HTTPϦΫΤετ͕དྷΔ 2. HTTPϨεϙϯεΛฦ͢

  11. )551ϦΫΤετ 3'$ࢀর GET /index.html HTTP/1.1 Host: localhost Connection: keep-alive Cache-Control:

    max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; ... Accept: text/html,application/xhtml+xml;q=0.9,image/webp,*/*;q=0.8 DNT: 1 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: en-US,en;q=0.8,ja;q=0.6
  12. )551Ϩεϙϯε 3'$ࢀর HTTP/1.1 200 OK Content-Type: text/html Cache-Control: max-age=8640000 Accept-Ranges:

    bytes Content-Length: 197 Server: OrenoWebServer/0.1 <!DOCTYPE html> <html lang="en"> <head> <!— 以下略 —>
  13. ؆୯ͦ͏͡Όͳ͍͔

  14. ෼ޙ ߦͷ8&#αʔόര஀

  15. Μʁ

  16. Socket??

  17. ಡΜͰ ࡶ

  18. ߦ8&#αʔό ϒϩοΩϯάIO + γϯάϧϓϩηε QSPDFTTͰSFRͣͭ৺ΛࠐΊͯॲཧ

  19. ෳ਺ϦΫΤετΛॲཧ͍ͨ͠

  20. ྫ͑͹"QBDIF NPE@QIQ ϒϩοΩϯάIO + IOଟॏԽ ༧ΊϓϩηεΛGPSLͯ͠ෳ਺SFRΛॲཧ Prefork

  21. Α͠ʂ࡞Ζ͏

  22. ͞Βʹ෼ޙ ߦͷِ"QBDIFര஀

  23. େࣄͳτί͸ίί QSFGPSL

  24. *0ଟॏԽͷࢀߟࢿྉ https://speakerdeck.com/bati11/otozhong-liang-kunaruhua

  25. DEMO IUUQTHJUIVCDPNIBOIBOQIQDPOGVL@EFNP

  26. 1)1Ͱ8FCαʔόΛ࡞Δͱ 1. HTTPϦΫΤετ͕෼͔Δʂ 2. HTTPϨεϙϯε͕෼͔Δʂ 3. IOͷॲཧϞσϧ͕෼͔Δʂ ͔΋͠Εͳ͍ʜ