asinfotrack / yii2-semaphore
yii2-framework 的轻量级信号量组件
1.0.0
2019-12-16 15:46 UTC
Requires
- php: >=7.0
- yiisoft/yii2: ~2.0.15
This package is auto-updated.
Last update: 2024-08-30 01:20:19 UTC
README
yii2-framework 的轻量级信号量组件
安装
添加依赖
安装此扩展的首选方法是使用 composer。
运行以下命令之一:
$ composer require asinfotrack/yii2-semaphore
或者添加以下内容到您的 composer.json
文件的 require
部分:
"asinfotrack/yii2-semaphore": "~1.0.0"
require
配置
您需要做的只是将组件配置添加到相应的配置文件中。
return [ //... 'components' => [ //... 'semaphore' => [ //use the file based implementation 'class' => \asinfotrack\yii2\semaphore\components\FileSemaphore::class, 'lockFolderAlias' => '@runtime/semaphores', ], //... ], //... ];
用法
以下示例代码展示了如何在控制台命令中与组件一起工作。两种方法在处理信号量已被占用的情况时的处理方式不同:第一种方法等待锁变为可用,而第二种方法不等待。如果不将 acquire()
的第二个参数设置为 false,则等待锁。
对于您要处理的每个信号量,可以使用一个可以自由定义的字符串常量。这样,可以并行使用多个信号量。
class SemaphoreDemoController extends \yii\console\Controller { public function actionWaitForLock() { Yii::$app->semaphore->acquire('my-lock', true); //do the actual work Yii::$app->semaphore->release('my-lock'); } public function actionSkipIfNotAvailable() { if (!Yii::$app->semaphore->acquire('my-lock', false)) { $this->stderr('Lock already taken'); return ExitCode::UNAVAILABLE; } //do the actual work Yii::$app->semaphore->release('my-lock'); } }
实现
基于文件实现
类:asinfotrack\yii2\semaphore\components\FileSemaphore
组件内部使用 php 的 flock()
-函数。因此,您需要考虑不同底层操作系统的差异。
变更日志
v1.0.0
- 初始发布
- 主类处于稳定状态