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

SwooleをつかったフレームワークSwoftをたのしむ

 SwooleをつかったフレームワークSwoftをたのしむ

uzullaさんのPHPerKaigi2018「大統一PHP」(https://speakerdeck.com/uzulla/da-tong-php)で紹介されていたSwooleという非同期かつ、Coroutineの仕組みをもったライブラリがあります
Swooleを用いたフレームワークの1つにSwoftがあります。
SwoftはビルトインでHTTPのサーバとして動作し、PSR-7、PSR-14、PSR-15、PSR-16を準拠している
モダンでハイパフォーマンスなAOPとCoroutineをもったPHPフレームワークです
そんないけてるフレームワークSwoftを紹介します

#phpconsen

CyberAgent SGE Engineer

January 26, 2019
Tweet

More Decks by CyberAgent SGE Engineer

Other Decks in Technology

Transcript

  1. 4XPPMFΛ͔ͭͬͨϑϨʔϜϫʔΫ
    4XPGUΛͨͷ͠Ή
    !HPPEPP

    QIQDPOTFO

    View Slide

  2. • גࣜձࣾαΠόʔΤʔδΣϯτ
    • 4(&౷ׅຊ෦ٕज़౷ׅࣨࣨ௕
    • ࢠձࣾࣾ$50
    • גࣜձࣾ$SBGU&HH
    • גࣜձࣾδʔΫϨετ
    • גࣜձࣾαϜβοϓ
    • നҪɹӳ
    • ΤϯδχΞ
    • #MPH
    IUUQBNFCMPKQHPPEPP
    ͓લɺ୭Α
    • ઋ୆ࢢຽ
    • 5XJUUFS
    !HPPEPP
    • %2
    ͙ͪ͢Ή '#

    ϓΫϦϙ ཱྀܳਓ

    View Slide

  3. "HFOEB
    w4XPPMFͱ͸
    w4XPPMFΛ༻͍ͨϑϨʔϜϫʔΫ
    w4XPGUͱ͸
    wαϯϓϧΞϓϦ
    w·ͱΊ

    View Slide

  4. 4XPPMFͱ͸

    View Slide

  5. 1)1ͰΠϕϯτۦಈͷඇಉظ
    ˍίϧʔνϯϕʔεͷฒߦॲཧ

    View Slide

  6. 1)1FS,JBHJͷV[VMMB͞ΜͷൃදͰ஌Γ·ͨ͠
    https://speakerdeck.com/uzulla/da-tong-php

    View Slide

  7. 1)1ͷFYUFOTJPOͱͯ͠
    ಋೖ͠·͢
    # pecl install swoole

    View Slide

  8. 4XPPMFΛ༻͍ͨ
    ϑϨʔϜϫʔΫ

    View Slide

  9. 4XPPMFͷ(JU)VCͰ঺հ͞Ε͍ͯΔ
    ϑϨʔϜϫʔΫɹ̏ͭ
    https://github.com/swoole/swoole-src

    View Slide

  10. 4XPGU
    ͜Ε͔Β঺հ͢ΔϑϨʔϜϫʔΫ
    ϞμϯͰɺߴੑೳͰ
    "01ͱ$PSPVUJOFΛඋ͑ͨϑϨʔϜϫʔΫ

    View Slide

  11. &BTZTXPPMF
    ؆୯ʹ4XPPMFΛࢼ͢ͷͳΒɺͪ͜Β
    https://speakerdeck.com/sgeengineer/isucon8deyu-xuan-luo-tisitafalsede-swoole-easyswoole-deshu-kihuan-ete-gan-xiang-zhan-debentizou-rasetemitahua
    1)1$POGFSFODFͷ
    -5Ͱ࿩͠·ͨ͠ɾɾɾ

    View Slide

  12. ͪͳΈʹɾɾ
    1)1$POGFSFODF-5ͷ݁࿦

    View Slide

  13. ࢀߟ4MJN̏ͷॳظείΞ໿

    View Slide

  14. 4XPPMFΛ༻͍ͨ
    ϑϨʔϜϫʔΫͷ͸ͳ͠ʹ
    ΋Ͳͬͯ

    View Slide

  15. 4BCFS
    'BUF޷͖͕ͭͬͨͬ͘Ά͍

    View Slide

  16. 4XPGUͱ͸

    View Slide

  17. https://www.swoft.org/
    ެࣜ
    )1

    View Slide

  18. தࠃޠ͕ಡΊͳ͍ͷͰ
    ӳޠʹ຋༁ͯ͠
    ಡΈ·͢

    View Slide

  19. https://www.swoft.org/

    View Slide

  20. ͳΜͱͳ͘ಡΊΔ

    View Slide

  21. https://www.swoft.org/
    1)1ͷϑϧελοΫ
    DPSPVUJOFϑϨʔϜϫʔΫ

    View Slide

  22. ಛ௃

    View Slide

  23. •Base on Swoole extension
    •Built-in HTTP, TCP, WebSocket
    Coroutine Server
    •Powerful AOP (Aspect Oriented
    Programming)
    •Flexible and comprehensive
    annotations framework
    •Global dependency injection
    container
    •PSR-7 based HTTP message
    implementation
    •PSR-14 based event manager
    •PSR-15 based middleware
    •PSR-16 based cache design
    •Scalable high performance RPC
    •Holistic service governance, fallback,
    load balance, service registration
    and discovery
    •Database ORM
    •Universal connection pools
    •Mysql, Redis, RPC, HTTP Coroutine
    Clients
    •Coroutine driver client and blocking
    driver client seamlessly switch
    automatically
    •Coroutine and asynchronous task
    delivery
    •Custom user processes
    •RESTful supported
    •Internationalization (i18n) supported
    •High performance router
    •Fast and flexible parameter validator
    •Alias mechanism
    •Powerful log component
    •Cross-platform application auto-
    reload mechanism
    https://github.com/swoft-cloud/swoft ͷREADMEͷӳ༁
    Ҿ༻ɿ

    View Slide

  24. ΊͬͪΌ
    ػೳઆ໌͋Δ

    View Slide

  25. ࠓճઆ໌͢Δͷ͸
    ࣍ͷҰ෦ͷػೳ
    αϯϓϧΞϓϦͰ࢖༻ͨ͠ػೳ

    View Slide

  26. •Built-in HTTP, TCP,
    WebSocket Coroutine
    Server
    •Powerful AOP
    (Aspect Oriented
    Programming)
    •Flexible and
    comprehensive
    annotations
    framework
    •Global dependency
    injection container
    •PSR-7 based HTTP
    message
    implementation
    •Database ORM
    •Universal connection
    pools

    View Slide

  27. ࣮ࡍʹ
    αϯϓϧΞϓϦ
    ͭͬͯ͘Έͨ

    View Slide

  28. αϯϓϧΞϓϦ

    View Slide

  29. #PPLTIFMGΞϓϦ

    View Slide

  30. (PPHMF͕༻ҙͨ͠νϡʔτϦΞϧ༻ΞϓϦ
    https://github.com/GoogleCloudPlatform/getting-started-php
    w .Z42-΁3FBE8SJUF
    w ը૾ϑΝΠϧͷΞοϓϩʔυ
    w ੩తϑΝΠϧͷ഑৴
    w (PPHMFೝূ
    ͕੝Γࠐ·Ε͍ͯΔ

    View Slide

  31. 4XPGUͰ
    ͭͬͯ͘ΈΔ

    View Slide

  32. 3FRVFTUMJGFDZDMF
    https://doc.swoft.org/master/zh-CN/core/framework.html

    View Slide

  33. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft

    View Slide

  34. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    ίϯτϩʔϥʔ
    Ϟσϧ

    View Slide

  35. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    ౎౓ಡΈࠐ·ΕΔ
    ઃఆϑΝΠϧ
    ˞FOW͕༏ઌ
    CFBOੜ੒࣌ʹಡΈࠐ·ΕΔ
    ϑΝΠϧ

    View Slide

  36. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    ੩తϑΝΠϧஔ͖৔
    DTTɺKT

    View Slide

  37. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    Ұ࣌ϑΝΠϧஔ͖৔

    View Slide

  38. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    UFNQMBUFϑΝΠϧ

    View Slide

  39. 4XPGUͷϑΥϧμߏ੒ ࠷খݶ

    Project
    ├ app        
    │ ├ Controllers
    │ │ └ BooksController.php
    │ └ Models
    │   └ Entity
    │    └ Books.php
    ├ config
    │ ├ beans
    │ │ └ base.php
    │ └ properties
    │   ├ app.php
    │   └ db.php
    ├ public
    ├ runtime
    │ ├ logs
    │ ├ uploadfiles
    │ └ sessions
    ├ resources
    │ └ views
    │   └ books
    │     └ view.php
    └ bin
      ├ bootstrap.php
      └ swoft
    ىಈ༻ϑΝΠϧ

    View Slide

  40. ίϯτϩʔϥʔ

    View Slide

  41. ίϯτϩʔϥʔ
    w 63-ͷϚοϐϯάΛBOOPUBUJPOͰ
    ઃఆ
    w ςϯϓϨʔτɺϨΠΞ΢τϑΝΠϧΛ
    BOOPUBUJPOͰઃఆ

    View Slide

  42. ίϯτϩʔϥʔ
    143४ڌ

    View Slide

  43. ίϯτϩʔϥʔ
    ʙதུʙ
    %FQFOEFODZ
    *OKFDUJPO

    View Slide

  44. Ϟσϧ &OUJUZ

    View Slide

  45. Ϟσϧ &OUJUZ

    $ php bin/swoft entity:create -d bookshelf
    ࣍ͷίϚϯυͰ%#͔Βࣗಈੜ੒
    ϦόʔεΤϯδχΞϦϯά

    View Slide

  46. Ϟσϧ03.

    View Slide

  47. Ϟσϧ03.
    03.
    #PPLTςʔϒϧσʔλΛऔಘ

    View Slide

  48. $POpH%#

    View Slide

  49. $POpH%#
    DPOOFDUJPOQPPMͷઃఆ

    View Slide

  50. ڵຯΛ΋ͬͨํ͸GPSLͯ͠
    ͥͻ৮ͬͯΈ͍ͯͩ͘͞
    https://github.com/shirai-suguru/Google-Bookshelf-swoft

    View Slide

  51. ·ͱΊ

    View Slide

  52. w4XPGUͰ(PPHMFͷ#PPLTIFMG
    ΞϓϦΛͭͬͯ͘Έͨ
    w"OOPUBUJPOʹΑΔϧʔςΟϯάɺ
    %*͕͓खܰ
    w143΋Ζ΋Ζ४ڌ

    w03.΋׬උ
    wҙࣝ͠ͳͯ͘΋ίωΫγϣϯϓʔ
    Ϧϯά͞ΕΔ

    View Slide

  53. Ϟμϯʹ͔͚Δ
    ʴ
    Ճ͑ͯɺ$PSPVUJOF
    Ͱฒྻॲཧָ͕ʑʂ
    ࠓճ͸આ໌Ͱ͖ͣ

    View Slide

  54. Έͳ͞Μ΋
    TXPPMFΛ͔ͭͬͨ
    ϑϨʔϜϫʔΫʹ
    νϟϨϯδ͠·͠ΐ͏

    View Slide

  55. ͓·͚

    View Slide

  56. *46$0/
    ϕϯνϚʔΫ݁Ռ
    ൺֱ

    View Slide

  57. લճͱಉ͡؀ڥ͸
    ༻ҙͰ͖ͳ͔ͬͨͷͰ
    ($1্Ͱଌͬͨ
    ݁ՌͰ͢
    n1-highcpu-2ʢvCPU x 2ɺϝϞϦ 1.8 GBʣ

    View Slide

  58. %FGBVMU 4MJN
    &BTZ4XPPMF W
    4XPGU
    ճ໨
    ̎ճ໨
    ճ໨
    ճ໨
    ̑ճ໨
    ฏۉ
    ˞ϩδοΫมߋͳ͠ͷঢ়ଶ
    1)1
    4XPPMF

    View Slide

  59. %FGBVMU 4MJN
    &BTZ4XPPMF W
    4XPGU
    ճ໨
    ̎ճ໨
    ճ໨
    ճ໨
    ̑ճ໨
    ฏۉ
    ˞ϩδοΫมߋͳ͠ͷঢ়ଶ
    1)1
    4XPPMF
    ϑϨʔϜϫʔΫͷ
    ҧ͍͸ޡࠩͰ͢ʂ
    https://github.com/shirai-suguru/isucon8-swoft
    https://github.com/shirai-suguru/isucon8-easyswoole
    &BTZ4XPPMFͷ࣮૷ɿ
    4XPGUͷ࣮૷ɿ

    View Slide

  60. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide