asinfotrack/yii2-semaphore

yii2-framework 的轻量级信号量组件

安装: 38

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 2

类型:yii2-extension

1.0.0 2019-12-16 15:46 UTC

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
  • 初始发布
  • 主类处于稳定状态