行使 Swoole 来增速你的 Laravel 应用

图片 1

Swoole 是为 PHP 开发的生产级异步编程框架。
他是一个纯 C 开发的恢弘, 他允许 PHP 开发者在 PHP 中写
高性能,可增添的并发 TCP, UDP, Unix socket, HTTP, WebSocket 服务,
而不需要有所太多的非阻塞 I/O 编程和低级另外 Linux 内核知识。
你可以把 Swoole 想象成 NodeJS, 但对于 PHP 来说将有更高性能。

怎么要在 Swoole 上运行 Laravel?

下图呈现了 PHP 的生命周期。正如你所观望的那么,当您每便运行 PHP
脚本的时候,PHP都急需发轫化模块并为你的运作条件启动Zend引擎。并且将 PHP
脚本编译为 OpCodes 以便 Zend引擎执行。

然则,
这样的生命周期需要在历次请求的时候都施行五回。因为单个请求成立的环境在伸手执行完毕后会登时销毁。

换句话说, 在观念的 PHP 生命周期中,
为了脚本执行而浪费了大气的年华去创制和销毁资源。想象一下像 Laravel
这样的框架, 在每一次请求中需要加载多少文件? 同时也浪费了大气的 I/O 操作
图片 2

故此如若大家使用 Swoole 内置一个采纳级其余 Server,
并且所有脚本文件在加载两次以后便足以保存在内存中呢?
这就是为啥大家需要尝试在 Swoole 上运行 Laravel。 Swoole
可以提供有力性能而 Laravel
则足以提供优雅代码结构接纳。这俩儿真是完美组合 !

安装

以下是 swooletw/laravel-swoole 的重中之重特色:

  • 在 Swoole 运行 Laravel/Lumen 应用
  • 卓绝的性质提升至 30x
  • 沙盒格局隔离应用程序容器
  • 协理在 Laravel 应用中运作 WebSocket 服务器
  • 支持 Socket.io 协议
  • 协理 Swoole 表跨进程共享

使用 Composer 安装:

$ composer require swooletw/laravel-swoole

本条包依赖于 Swoole 。在采纳那一个包从前,请保管您的机械安装了科学的
Swoole 。使用下边的指令飞速安装(linux):

pecl install swoole

在装置这些扩大之后,你需要编制 php.ini 添加  extension=swoole.so

php -i | grep php.ini                      # check the php.ini file location
sudo echo "extension=swoole.so" > php.ini  # add the extension=swoole.so to the end of php.ini
php -m | grep swoole                       # check if the swoole extension has been enabled

访问 官网 获取更多的信息。

留神:Swoole 现在只协理 Linux 和 OSX 。Windows 服务器现在还不协助。

接下来,添加服务提供者:

设若你使用 Laravel ,在 config/app.php
服务提供者数组添加该服务提供者:

[
    'providers' => [
        SwooleTW\Http\LaravelServiceProvider::class,
    ],
]

假若你利用 Lumen ,请将上边的代码添加到 bootstrap/app.php

$app->register(SwooleTW\Http\LumenServiceProvider::class);

本条包帮忙包活动发现体制。假设你运行 Laravel 5.5
以上版本,你可以跳过这一步。

树立并运行起来

现今,你可以推行以下的吩咐来启动 Swoole HTTP 服务。

$ php artisan swoole:http start

下一场您可以观望以下信息:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>

今昔得以经过走访 http://127.0.0.1:1215 来进入 Laravel 应用。

规则测试

运用 MacBook Air 13寸(2015年产)及彻底的 Lumen 5.5 项目测试:
标准化测试工具: wrk

wrk -t4 -c100 http://your.app

基于 FPM 的 Nginx

Running 10s test @ http://lumen.app:9999
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.14s   191.03ms   1.40s    90.31%
    Req/Sec    22.65     10.65    50.00     65.31%
  815 requests in 10.07s, 223.65KB read
Requests/sec:     80.93
Transfer/sec:     22.21KB

Swoole HTTP 服务

Running 10s test @ http://127.0.0.1:1215
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.58ms    4.74ms  68.73ms   81.63%
    Req/Sec     2.19k   357.43     2.90k    69.50%
  87879 requests in 10.08s, 15.67MB read
Requests/sec:   8717.00
Transfer/sec:      1.55MB

更多音信

在 Github Repo
查看官方包,
也得以参考 官方文档 获取更多消息。

更多现代化 PHP 知识,请前往 Laravel / PHP
知识社区

相关文章