使用 Swoole 来加速你的 Laravel 应用

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 操作

因此如果我们利用 Swoole 内置一个应用级别的 Server, 并且所有脚本文件在加载一次之后便可以保存在内存中呢? 这就是为什么我们需要尝试在 Swoole 上运行 Laravel。 Swoole 可以提供强大性能而 Laravel 则可以提供优雅代码结构使用。这俩儿真是完美组合 !

安装
以下是 swooletw/laravel-swoole 的主要特点:

在 Swoole 运行 Laravel/Lumen 应用
出色的性能提升至 30x
沙盒模式隔离应用程序容器
支持在 Laravel 应用中运行 WebSocket 服务器
支持 Socket.io 协议
支持 Swoole 表跨进程共享
使用 Composer 安装:

$ composer require swooletw/laravel-swoole
1
2
这个包依赖于 Swoole 。在使用这个包之前,请确保你的机器安装了正确的 Swoole 。使用下面的命令快速安装(linux):

pecl install swoole
1
2
在安装这个扩展之后,你需要编辑 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
1
2
3
4
访问 官网 获取更多的信息。

注意:Swoole 现在只支持 Linux 和 OSX 。Windows 服务器现在还不支持。

然后,添加服务提供者:

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

[
‘providers‘ => [
SwooleTW\Http\LaravelServiceProvider::class,
],
]
1
2
3
4
5
6
如果你使用 Lumen ,请将下面的代码添加到 bootstrap/app.php:

$app->register(SwooleTW\Http\LumenServiceProvider::class);
1
2
这个包支持包自动发现机制。如果你运行 Laravel 5.5 以上版本,你可以跳过这一步。

建立并运行起来
现在,你可以执行以下的命令来启动 Swoole HTTP 服务。

$ php artisan swoole:http start
1
2
然后你可以看到以下信息:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>
1
2
3
现在可以通过访问 http://127.0.0.1:1215 来进入 Laravel 应用。

基准测试
使用 MacBook Air 13寸(2015年产)及干净的 Lumen 5.5 项目测试:
基准测试工具: wrk

wrk -t4 -c100 http://your.app
1
2
基于 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
1
2
3
4
5
6
7
8
9
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
————————————————
版权声明:本文为CSDN博主「SummerCaff」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/summerliguilong/article/details/80347714

原文地址:https://www.cnblogs.com/nahe/p/11703673.html

时间: 2024-10-21 22:27:04

使用 Swoole 来加速你的 Laravel 应用的相关文章

使用 swoole 加速你的 laravel

在此前的另外一篇文章讨论过 opcache:php 性能优化之opcache - 让你的php性能提升 50% 再来复习一下吧,导致 php 慢的各种因素中解析性语言的特性可以说是罪魁祸首,再加上,每次请求完都释放请求时所加载的全部文件,因此也就显得更慢了. 后来我们有了 opcache,使用这个的话,请求时间大概会缩短到原来的一半,但是我们会发现其实花的时间看起来还是很多. 这是为什么呢?原因在于,opcache 只是省去了解析文件的时间,实际运行的时候,我们还是需要去把相同的代码又跑一遍,具

Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)

1 开发需要环境 工欲善其事,必先利其器.在正式开发之前我们检查好需要安装的拓展,不要开发中发现这些问题,打断思路影响我们的开发效率. 安装 swoole 拓展包 安装 redis 拓展包 安装 laravel5.5 版本以上 如果你还不会用swoole就out了 2 Laravel 生成命令行 php artisan make:command SwooleDemo class SwooleDemo extends Command { protected $signature = 'swoole

基于Laravel+Swoole开发智能家居后端

基于Laravel+Swoole开发智能家居后端 在上一篇<Laravel如何优雅的使用Swoole>中我已经大概谈到了Laravel结合Swoole的用法. 今天,我参与的智能家居项目基本上已经结束了Web服务器及android端的开发(熬了个通宵突击把剩下的做了,好累), 趁热来聊聊基于Laravel+Swoole开发智能家居后端的关键技术点. 16进制ASCII码协议的解析 硬件我不谈,我只需要关心数据解析.如何基于Swoole如果在php中解析16进制的ascii码,这种文章还比较少呢

在 Laravel 应用中使用 pjax 进行页面加速

说明# PHPHub 使用 pjax 来加速网页的加载, 这篇文章是在开发完此功能后做的笔记. 什么是 Pjax# .--. / ## a a ( '._) |'-- | _.\___/_ ___pjax___ ."\> \Y/|<'. '._.-' / \ \_\/ / '-' / | --'\_/|/ | _/ |___.-' | |`'` | | | | / './ /__./` | | \ | | \ | | ; | | / | | jgs |___\_.\_ `-"

Laravel如何优雅的使用Swoole

背景 正在做一个智能家居的项目(钱低的吓死人怎么办),接收下位机(就是控制智能家居硬件模块的HUB)协议解析,Web端维护硬件状态,利用APP交互.由于下位机数据是发送到服务器的XXX端口,所以必须对XXX端口进行监听.其实和聊天室的概念差不多,研究了一下workerman.swoole和其他几个开源的项目,决定采用swoole. 关于php解析下位机的16进制协议,其实相当之扯蛋,要是你最好还是用.NET或者JAVA吧.很久没碰MVC了,光是为解析协议写webservice觉得钱又太TM低了,

如何用RoadRunner加速Laravel应用

RoadRunner是一个用Go语言实现的高性能PSR-7服务器,你没看错,是Go语言实现的. RoadRunner首先用Go实现了一个高性能的服务器,然后通过goridge IPC把请求转发给多个PHP CLI Worker,Worker会把请求重新封装成PSR-7 Request交给框架进行处理. 娱乐测试 使用siege测试Laravel的Welcome页面,250个并发用户,持续30秒,对比Nginx + FPM和RoadRunner. Nginx + FPM: $ siege --no

react+laravel与服务端渲染的思考

1.首先 controller 几乎不写代码是不可能的.我现在就是 react.js 和 laravel 一起用,前后端完全分离的. 用 react.js 搭建前端视图,然后用 ajax 或者 fetch 来和 laravel 通信.laravel 写的接口代码几乎都在 controller 里面. 2.不要 react.js 和 laravel 的 blade 混写,要么要么完全分离,要么就完全用 blade 不然项目大一点痛苦就来了. 3.更不要想用 laravel 来服务端渲染 react

Linux laravel安装

第一步:安装php套件 目前为止laravel是5.1版本,需要对php有要求,要php5.59以上 The Laravel framework has a few system requirements. Of course, all of these requirements are satisfied by the Laravel Homestead virtual machine: * PHP >= 5.5.9 * OpenSSL PHP Extension * PDO PHP Exte

PhpStorm下Laravel代码智能提示

phpstorm&Laravel PHPstorm是我见过的最好的PHP的IDE,前年用的时候就毫不犹豫的抛弃了zend studio :) ,Laravel是我用过最好的框架,除了做手游后台这类有高并发需求的项目的时候会使用swoole,像yii,thinkPHP,zend之类已经直接不在项目中用了,不过悲伤的是最好的IDE不支持最好的Laravel的代码提示,后来我在github上翻,找到了laravel4-phpstorm-helper这个工具,不过很遗憾,已经不更新很久了,后来在外国论坛