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

Swoole in 5 Minutes [en]

Swoole in 5 Minutes [en]

Blazingly-Fast, Event-Driven, Asynchronous PHP. Berlin PHP Usergroup 02/06/2018

Christoph Lühr

February 06, 2018
Tweet

More Decks by Christoph Lühr

Other Decks in Technology

Transcript

  1. Christoph Lühr
    @chluehr / bephpug 2018
    "Fast, faster, Swoole"
    Teaser:
    Swoole in 5 Minutes

    View Slide

  2. View Slide

  3. SIN
    CE
    2000

    View Slide

  4. View Slide

  5. "Blazingly-Fast,
    Event-Driven,
    Asynchronous PHP."

    View Slide

  6. View Slide

  7. $ pecl install swoole

    View Slide

  8. $ brew install swoole

    View Slide

  9. $server = new \Swoole\Http\Server('0.0.0.0', 9000);
    $server->on('Request', function ($request, $response) {
    $response->end('OK');
    });
    $server->start();

    View Slide

  10. $loop = React\EventLoop\Factory::create();
    $server = stream_socket_server('tcp://0.0.0.0:9000');
    stream_set_blocking($server, 0);
    $loop->addReadStream($server, function ($server) use ($loop) {
    $conn = stream_socket_accept($server);
    $data = "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nHi\n";
    $loop->addWriteStream($conn, function ($conn) use (&$data, $loop) {
    $written = fwrite($conn, $data);
    if ($written === strlen($data)) {
    fclose($conn);
    $loop->removeStream($conn);
    } else {
    $data = substr($data, $written);
    }
    });
    });
    $loop->run();

    View Slide

  11. PHP-PM

    View Slide

  12. View Slide

  13. Sugar and Cream?
    (PHP is not enough ...)

    View Slide

  14. Async IO

    View Slide

  15. File I/O
    (and some tagline to go along)

    View Slide

  16. TCP Clients
    MySQL / Redis / HTTP / WebSocket

    View Slide

  17. "Reality Distortion"
    BENCHMARKS

    View Slide

  18. 300.000
    Req/Sec

    View Slide

  19. wrk -t4 -c400 -d10s http://127.0.0.1:1337/
    Running 10s test @ http://127.0.0.1:1337/
    4 threads and 400 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 1.46ms 1.42ms 27.96ms 85.66%
    Req/Sec 75.29k 36.43k 183.55k 72.75%
    3007806 requests in 10.06s, 605.25MB read
    Requests/sec: 299103.32
    Transfer/sec: 60.19MB

    View Slide

  20. wrk -t16 -c400 -d30s http://localhost:9000/
    Running 30s test @ http://localhost:9000/
    16 threads and 400 connections
    Thread Stats Avg Stdev Max +/- Stdev
    Latency 6.97ms 7.07ms 226.95ms 93.28%
    Req/Sec 4.00k 0.96k 15.36k 76.15%
    1909179 requests in 30.09s, 282.21MB read
    Requests/sec: 63442.77
    Transfer/sec: 9.38MB

    View Slide

  21. Demo

    View Slide

  22. Real World(tm)
    References?

    View Slide

  23. View Slide

  24. View Slide

  25. To good to be true...?
    DRAWBACKS

    View Slide

  26. 中文

    View Slide

  27. View Slide

  28. Thanks!
    Questions?
    Christoph Lühr
    [email protected] [email protected] @chluehr
    Slides license Attribution-NonCommercial-ShareAlike 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/

    View Slide

  29. ● Swoole 2.0
    https://www.swoole.co.uk/

    View Slide