Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPでWebサーバ作ろう

 PHPでWebサーバ作ろう

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

Ryo Tomidokoro

June 10, 2017
Tweet

More Decks by Ryo Tomidokoro

Other Decks in Programming

Transcript

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

    View Slide

  2. ͜ΜͳᷚΛฉ͍ͨ

    View Slide

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

    View Slide

  4. Ͱ͸໰͏

    View Slide

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

    View Slide

  6. ແ͍

    View Slide

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

    View Slide

  8. େ͍ʹ༗Δʂ

    View Slide

  9. 8αʔόͱ͸ʁ

    View Slide

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

    View Slide

  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

    View Slide

  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




    View Slide

  13. ؆୯ͦ͏͡Όͳ͍͔

    View Slide

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

    View Slide

  15. Μʁ

    View Slide

  16. Socket??

    View Slide

  17. ಡΜͰ ࡶ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. Α͠ʂ࡞Ζ͏

    View Slide

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

    View Slide

  23. େࣄͳτί͸ίί
    QSFGPSL

    View Slide

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

    View Slide

  25. DEMO
    IUUQTHJUIVCDPNIBOIBOQIQDPOGVL@EFNP

    View Slide

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

    View Slide