jackdou/laravel-swoole
Composer 安装命令:
composer require jackdou/laravel-swoole
包简介
laravel 框架的 swoole 组件,基础的TCP,WS 服务
README 文档
README
基于 swoole 的 laravel RPC 扩展包, 目前提供了 RPC Client , RPC Server 和集群机器节点管理 server 功能
使用
-
条件
- php >= 7.1
- swoole >= 4.3
- linux 系统环境
- laravel >= 5.5
-
安装
composer require jackdou/laravel-swoole -
配置
- 进入项目根目录 执行
php artisan vender:publish - 选择
Provider: JackDou\Swoole\SwooleServiceProvider生成配置文件 - 具体配置内容请根据实际情况在
config/swoole.php中修改 - 配置单个服务多节点的方式(不推荐)
- 在
config/server_node.php中可以根据自己的服务名称配置多个机器ip - 可设置权重和在线状态,权重越高分配到的请求也就越多
- 配置的每个机器上都得按下面的方式启动相应的服务
- 在
- 如果使用
management管理后台,需要将服务发现方式改为2(推荐)
- 进入项目根目录 执行
-
启动服务
php artisan swoole:server server_name start/stop/reload//开启、关闭、热重启 server_name 服务- 使用
ps aux | grep 'your server_name'可以查看启动的进程信息
-
fpm 中使用同步客户端访问微服务 demo
-
编写微服务的业务代码:默认目录为
app/Services,新建 TestService.php 类并添加如下内容namespace App\Services; class TestService { //服务类都需要是静态属性 public static function test($msg = 'hello world') { return ['code' => 1, 'msg' => $msg]; } } -
确保配置文件没问题后启动服务
-
在项目任意可以访问的
Controller中添加如下内容use JackDou\Swoole\Facade\Service; //getResult 参数为超时时间,单位秒,默认0.5秒。如果服务在0.5秒内没有返回结果则返回null $res = Service::getInstance('swoole')->call('TestService::test', '你好')->getResult(0.5); dd($res); -
浏览器中访问观察效果。
-
-
若你的
laravel项目使用swooletw/laravel-swoole等类似组件将框架常驻进程或者在服务的项目代码里可以使用协程异步客户端提高性能 -
Coroutine\Client使用 demonamespace App\Services; class TestService { //测试协程客户端 public static function test_co($msg = 'hello world') { //常规调用 try { $co = new SwooleCoClient(); $co->getInstance('swoole') ->call('TestService::test') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($err_msg, $err_code) { //请求失败了,在这里记录日志等 })->run(); } catch (\Throwable $throwable) { //寻找服务等发生错误,在这里看原因 } //在一个请求内对一个服务多次调用 try { $co = new SwooleCoClient(); $swoole = $co->getInstance();//同一个服务只用指定一次 $swoole->call('TestService::test') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); $swoole->call('TestService::test_node') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); $swoole->run(); } catch (\Throwable $throwable) { //寻找服务等错误,在这里查看 } //在一个请求内对不同服务调用 try { $co = new SwooleCoClient(); $swoole = $co->getInstance('swoole'); $swoole->call('TestService::test') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); //重新指定另一个服务 $swoole = $co->getInstance('swoole2'); $swoole->call('TestService::test_node') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); $swoole->run(); } catch (\Throwable $throwable) { //寻找服务等错误,在这里查看 } //请求成功一个以后请求另一个服务 try { $co = new SwooleCoClient(); $swoole = $co->getInstance('swoole'); $swoole->call('TestService::test') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 $co2 = new SwooleCoClient(); $swoole2 = $co2->getInstance('swoole2'); $swoole2->call('TestService::test_node') ->onSuccess(function ($response_data) { //$response_data 响应数据,请求的service返回的数据结构 //在这里处理请求成功返回数据以后的逻辑 })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); $swoole2->run(); })->onFail(function ($msg, $code) { //请求失败了,在这里记录日志等 }); $swoole->run(); } catch (\Throwable $throwable) { //寻找服务等错误,在这里查看 } //代码在这里返回,此次请求结束,但是上面的服务调用可能还在执行中!!! return ['code' => 1, 'msg' => $msg]; } } -
建议 & 注意
- 默认是非守护进程方式启动, 推荐使用
supervisor管理swoole进程 v1.2.2后支持通过.env文件区分测试环境和正式环境监听的服务ip和port- 改动配置或服务代码后必须
reload或重启服务进程,不然不会生效 phpfpm和cli的php.ini通常不是一个文件,在fpm中使用时需要保证对应的php.ini文件中添加了swoole扩展- 异步协程客户端在非密集型
cpu io的场景下可以提高性能,推荐使用,但是注意异步代码的执行逻辑和编写方式 - 暂不支持传递图片文件等资源
- 默认是非守护进程方式启动, 推荐使用
-
迭代计划
jackdou/laravel-swoole 适用场景与选型建议
jackdou/laravel-swoole 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 126 次下载、GitHub Stars 达 5, 最近一次更新时间为 2018 年 02 月 26 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 jackdou/laravel-swoole 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 jackdou/laravel-swoole 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 126
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 5
- 点击次数: 2
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-02-26