其他特性
配置Swoole事件
支持的事件列表:
事件 | 需实现的接口 | 发生时机 |
---|---|---|
ServerStart | Hhxsv5\LaravelS\Swoole\Events\ServerStartInterface | 发生在Master进程启动时,此事件中不应处理复杂的业务逻辑,只能做一些初始化的简单工作 |
ServerStop | Hhxsv5\LaravelS\Swoole\Events\ServerStopInterface | 发生在Server正常退出时,此事件中不能使用异步或协程相关的API |
WorkerStart | Hhxsv5\LaravelS\Swoole\Events\WorkerStartInterface | 发生在Worker/Task进程启动完成后 |
WorkerStop | Hhxsv5\LaravelS\Swoole\Events\WorkerStopInterface | 发生在Worker/Task进程正常退出后 |
WorkerError | Hhxsv5\LaravelS\Swoole\Events\WorkerErrorInterface | 发生在Worker/Task进程发生异常或致命错误时 |
1.创建事件处理类,实现相应的接口。
namespace App\Events;
use Hhxsv5\LaravelS\Swoole\Events\ServerStartInterface;
use Swoole\Atomic;
use Swoole\Http\Server;
class ServerStartEvent implements ServerStartInterface
{
public function __construct()
{
}
public function handle(Server $server)
{
// 初始化一个全局计数器(跨进程的可用)
$server->atomicCount = new Atomic(2233);
// 控制器中调用:app('swoole')->atomicCount->get();
}
}
namespace App\Events;
use Hhxsv5\LaravelS\Swoole\Events\WorkerStartInterface;
use Swoole\Http\Server;
class WorkerStartEvent implements WorkerStartInterface
{
public function __construct()
{
}
public function handle(Server $server, $workerId)
{
// 初始化一个数据库连接池对象
// DatabaseConnectionPool::init();
}
}
2.配置。
// 修改文件 config/laravels.php
'event_handlers' => [
'ServerStart' => [\App\Events\ServerStartEvent::class], // 按数组顺序触发事件
'WorkerStart' => [\App\Events\WorkerStartEvent::class],
],
Serverless
阿里云函数计算
1.修改bootstrap/app.php
,设置storage目录。因为项目目录只读,/tmp
目录才可读写。
$app->useStoragePath(env('APP_STORAGE_PATH', '/tmp/storage'));
2.创建Shell脚本laravels_bootstrap
,并赋予可执行权限
。
#!/usr/bin/env bash
set +e
# 创建storage相关目录
mkdir -p /tmp/storage/app/public
mkdir -p /tmp/storage/framework/cache
mkdir -p /tmp/storage/framework/sessions
mkdir -p /tmp/storage/framework/testing
mkdir -p /tmp/storage/framework/views
mkdir -p /tmp/storage/logs
# 设置环境变量APP_STORAGE_PATH,请确保与.env的APP_STORAGE_PATH一样
export APP_STORAGE_PATH=/tmp/storage
# Start LaravelS
php bin/laravels start
3.配置template.xml
。
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
laravel-s-demo:
Type: 'Aliyun::Serverless::Service'
Properties:
Description: 'LaravelS Demo for Serverless'
fc-laravel-s:
Type: 'Aliyun::Serverless::Function'
Properties:
Handler: laravels.handler
Runtime: custom
MemorySize: 512
Timeout: 30
CodeUri: ./
InstanceConcurrency: 10
EnvironmentVariables:
BOOTSTRAP_FILE: laravels_bootstrap