运行模式
swoole 运行
// 启动 Test配置文件 BinConfig 目录下
php server.php start --conf-Test
// 重启
php server.php reload --conf-Test
// stop 不推荐
ps -ef |grep -i Test |awk '{print $2}' |xargs kill -9
Cli 运行
// 控制器 方法 key value ....
php cli.php Tests run key value
特性
脚本服务
脚本服务 参数server_type 仅可使用 HTTP (默认)
高度依赖 Redis (worker进程任务)
框架自带进程应用 \PipProcess\Dispense::class 可用于:
可自定义分配 worker 进程任务
自定义worker 进程空闲重启时间
// 分配任务
\swoole_timer_tick(5000, [self::class, 'saveWorkConfig']);
// todo 每10分钟 定时重启 可自定义
\swoole_timer_tick(1000 * 600, [\Library\Kill::class, 'reloadWorker']);
脚本形式 Worker 进程分配任务
从上面分配任务定时器可以看到子进程启动分配worker 进程任务任务可自定义, 具体操作如下:
<?php
namespace Controller;
use Library\Logger;
use Core\BaseController;
class Test extends BaseController
{
/**
* worker 进程启动时 如果有分配任务 会根据默认路由 调用默认路由的 init 方法
*
* //默认路由 init
* 'autoRoute' => \Controller\Test::class,
*/
public function init()
{
// 初始铺单配置
$pudanInfo = SettingModel::savePudanConfig();
// 初始化铺单配置
Logger::pudanInfo(['初始铺单配置 =>' => $pudanInfo]);
// 每 300MS 更新对标交易对价格
\swoole_timer_tick(300, [PudanService::class, 'benchmarkPrice']);
// 设置定时器 更新铺单配置
\swoole_timer_tick(5000, [SettingModel::class, 'saveConfig']);
}
/**
* 子进程调用默认路由中 taskDispense 方法 返回值为任务列表
* ------------------------------------------------------------
*/
public function taskDispense()
{
// 获取需要铺单的交易对
$pudanList = PudanListModel::pudanList();
$taskList = [];
// 分配铺单任务
foreach ($pudanList as $pudanInfo) {
if (empty($pudanInfo['benchmark_exchange'])) continue;
// 任务参数 交易对 sig 标识 交易平台
$taskList[] = [
$pudanInfo['symbol'], // 交易对
$pudanInfo['ac_name'], // sig 账号标识
$pudanInfo['strategy'], // 策略
$pudanInfo['timidRate'], // 最怂比例参数 万分比
$pudanInfo['serviceRate'] // 手续费率 万分比
];
}
// 默认数组key 相当于 分配的worker进程ID
return $taskList;
}
}
对外接口服务
支持 Tcp Http Webscocket 协议, 框架兼容Swoole4.2版本, enable_coroutine 参数为 flase 使用 go 调用协程 (复杂业务不推荐使用swoole协程).
自定义参数 open_dispatch_func 接口服务开启该参数, 可自定义数据包分发方法 \Library\Dispatch::mode($packData). 分包策略
杂项:
日志类 \Library\Logger
钉钉通知 \Library\DingTalk\Action
数据库 \Library\Core\Links
通用方法 \Helper\...
Saber 人性化的协程HTTP客户端封装库 \Swlib\SaberGM 示例: \Commond\SpiderMan
异常总结
PHP Warning: Swoole\Server::start(): onPipeMessage handler error.
ProcessManager::sendToWorker($workerId, $taskInfo, [Central::class, 'taskRouter']);
抛错: PHP Warning: Swoole\Server::start(): onPipeMessage handler error.
修复 $taskInfo 外层包数组
ProcessManager::sendToWorker($workerId, [$taskInfo], [Central::class, 'taskRouter']);
以上就是本次分享的“ZS:一个最简单使用的swoole框架,麻雀虽小,五脏俱全”所有内容,想要获取更多swoole教程或者资讯欢迎关注编程学习网
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://phpxs.com/post/8081/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料