swoole coroutine measured channel chaos

channel arrays and similar can be used as the queue capacity is set property capacity, isEmpty () isFull () is used to determine the queue is empty or full, Push () queued pop () queue pop

interface pusher
{
    function push($data);
}
#require 'redisconn.php';
class mypusher implements pusher
{
    protected $mychannel;
    protected $size=10;
    public function __construct()
    {
        $this->mychannel = new Swoole\Coroutine\Channel(10);
        $this->mylen = $this->mychannel->length();
        echo "容量".$this->mychannel->capacity.PHP_EOL;
    }

    public function push($data)
    {
        if ($this->mychannel->isFull())
        {
            return 0;
        }
        else{
            //发送通知
            $this->mychannel->push($data);
            echo "当前元素个数".$this->mychannel->length();
            return 1;
        }
    }

    public function pop()
    {
        IF ($ the this -> mychannel-> isEmpty ()) 
        { 
            return  0 ; 
        } 
        the else 
        { 
            echo " current number of elements " $. the this -> mychannel-> length () value is PHP_EOL;. 
            var_dump ($ the this -> mychannel-> POP ()); 
            . echo value is PHP_EOL " the number of elements left " . $ the this -> mychannel-> length (.) value is PHP_EOL;
             return  . 1 ; 
        } 
    } 
} 
Go (function () { 
    $ thispusher =new mypusher();
    $thispusher->push(['name'=>'cj','age'=>20]);
    $thispusher->push(['name'=>'cpc','age'=>22]);
    $thispusher->push(['name'=>'xxd','age'=>40]);
    $thispusher->pop();
    $thispusher->pop();
    $thispusher->pop();

});

Test Results:

容量10
当前元素个数1当前元素个数2当前元素个数3当前元素个数3
array(2) {
  ["name"]=>
  string(2) "cj"
  ["age"]=>
  int(20)
}

还剩元素个数2
当前元素个数2
array(2) {
  ["name"]=>
  string(3) "cpc"
  ["age"]=>
  int(22)
}

还剩元素个数1
当前元素个数1
array(2) {
  ["name"]=>
  string(3) "xxd"
  ["age"]=>
  int(40)
}

还剩元素个数0
  • 实现一个redis连接池
class redispool
{
    protected $mypool;
    public function __construct($size)
    {
        $this->mypool = new Swoole\Coroutine\Channel($size);
        for ($i=0;$i<$size;$i++)
        {
            $redis = new Swoole\Coroutine\Redis();
            $redis->setOptions(['compatibility_mode' => true]);
            $rconn = $redis->connect('127.0.0.1',6379);
            if ($rconn == false)
            {
                throw new \http\Exception\RuntimeException('Damn~ fail to connet redis-server');
            }
            else{
                $this->mypool->push($redis);
            }
        }
    }

    public function push($redis)
    {
        $this->mypool->push($redis);
    }
    public function pop()
    {
        return $this->mypool->pop();
    }
}

 

Guess you like

Origin www.cnblogs.com/saintdingspage/p/11276399.html