zoukankan      html  css  js  c++  java
  • swoole 协程channel乱测

    channel和数组差不多,可以被用作队列,属性capacity是设置容量,isEmpty() isFull() 用来判断队列是空还是满,push()加入队列 pop()弹出队列

    interface pusher
    {
        function push($data);
    }
    #require 'redisconn.php';
    class mypusher implements pusher
    {
        protected $mychannel;
        protected $size=10;
        public function __construct()
        {
            $this->mychannel = new SwooleCoroutineChannel(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($this->mychannel->isEmpty())
            {
                return 0;
            }
            else
            {
                echo "当前元素个数".$this->mychannel->length().PHP_EOL;
                var_dump($this->mychannel->pop());
                echo PHP_EOL."还剩元素个数".$this->mychannel->length().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();
    
    });

    测试结果:

    容量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 SwooleCoroutineChannel($size);
            for ($i=0;$i<$size;$i++)
            {
                $redis = new SwooleCoroutineRedis();
                $redis->setOptions(['compatibility_mode' => true]);
                $rconn = $redis->connect('127.0.0.1',6379);
                if ($rconn == false)
                {
                    throw new httpExceptionRuntimeException('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();
        }
    }
  • 相关阅读:
    HDU.4352.XHXJ's LIS(数位DP 状压 LIS)
    AGC 015C.Nuske vs Phantom Thnook(思路 前缀和)
    window下域名解析系统DNS诊断命令nslookup详解
    Nginx入门篇-基础知识与linux下安装操作
    物理服务器Linux下软RAID和UUID方式挂载方法--Megacli64
    Linux下进程与线程的区别及查询方法
    Linux系统下DNS主从配置详解
    CactiEZ中文解决方案和使用教程
    关于MyBase 7.0 破解的方法
    git分支与合并(3)
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11276399.html
Copyright © 2011-2022 走看看