徐总多门店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
jiuhaoshenghuo/vendor/godruoyi/php-snowflake/src/SwooleSequenceResolver.php

82 lines
1.5 KiB

<?php
/*
* This file is part of the godruoyi/php-snowflake.
*
* (c) Godruoyi <g@godruoyi.com>
*
* This source file is subject to the MIT license that is bundled.
*/
namespace Godruoyi\Snowflake;
class SwooleSequenceResolver implements SequenceResolver
{
/**
* The las ttimestamp.
*
* @var null
*/
protected $lastTimeStamp = -1;
/**
* The sequence.
*
* @var int
*/
protected $sequence = 0;
/**
* The swoole lock.
*
* @var mixed
*/
protected $lock;
/**
* The cycle count.
*
* @var int
*/
protected $count = 0;
/**
* Init swoole lock.
*/
public function __construct()
{
$this->lock = new \swoole_lock(SWOOLE_MUTEX);
}
/**
* {@inheritdoc}
*/
public function sequence(int $currentTime)
{
/*
* If swoole lock failure,we return a bit number, This will cause the program to
* perform the next millisecond operation.
*/
if (!$this->lock->trylock()) {
if ($this->count >= 10) {
throw new \Exception('Swoole lock failure, Unable to get the program lock after many attempts.');
}
++$this->count;
return 999999;
}
if ($this->lastTimeStamp === $currentTime) {
++$this->sequence;
} else {
$this->sequence = 0;
}
$this->lastTimeStamp = $currentTime;
$this->lock->unlock();
return $this->sequence;
}
}