为什么要在 Swoole 上运行 Laravel?

发布时间 - 2022-04-26 00:00:00    点击率:

为什么要在 swoole 上运行 laravel?因为使用 swoole 可以加速 laravel 应用。下面本篇文章就来带大家聊聊怎么在swoole上使用laravel,希望对大家有所帮助!

Swoole 是为 PHP 开发的生产级异步编程框架。 他是一个纯 C 开发的扩展, 他允许 PHP 开发者在 PHP 中写 高性能,可扩展的并发 TCP, UDP, Unix socket, HTTP, WebSocket 服务, 而不需要拥有太多的非阻塞 I/O 编程和低级别的 Linux 内核知识。 你可以把 Swoole 想象成 NodeJS, 但对于 PHP 来说将有更高性能。【推荐学习: swoole教程】

为什么要在 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

这个包依赖于 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 来进入 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 查看官方包, 也可以参考 官方文档 获取更多信息。

英文原文地址:https://laravel-news.com/laravel-swoole?

【相关推荐:laravel视频教程】


# laravel  # swoole  # php  # composer  # bootstrap  # 并发  # 异步  # github  # windows  # http  # https  # udp  # websocket  # linux  # unix  # 你可以  # 如果你  # 要在  # 更多信息  # 加载  # 运行环境  # 太多  # 这就是  # 还不  # 当你 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: java中使用zxing批量生成二维码立牌  iOS发送验证码倒计时应用  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  文字头像制作网站推荐软件,醒图能自动配文字吗?  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  微信小程序 canvas开发实例及注意事项  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在阿里云服务器自主搭建网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  用v-html解决Vue.js渲染中html标签不被解析的问题  手机软键盘弹出时影响布局的解决方法  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  用yum安装MySQLdb模块的步骤方法  Laravel如何使用Collections进行数据处理?(实用方法示例)  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  如何正确下载安装西数主机建站助手?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Laravel如何使用Eloquent进行子查询  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Linux系统命令中tree命令详解  bootstrap日历插件datetimepicker使用方法  如何确保FTP站点访问权限与数据传输安全?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  公司网站制作价格怎么算,公司办个官网需要多少钱?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  详解Android中Activity的四大启动模式实验简述  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何在万网利用已有域名快速建站?  Firefox Developer Edition开发者版本入口  EditPlus中的正则表达式 实战(4)  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何快速搭建高效简练网站?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】