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();
        }
    }
  • 相关阅读:
    WEB安全 php+mysql5注入防御(一)
    Spring 整合 Quartz 实现动态定时任务(附demo)
    dubbo工作原理(3)
    dubbo服务降级(2)
    dubbo服务降级(1)
    程序员决对不能缺少产品思维
    GNUPG
    idea远程debug:tomcat
    基于JavaMail的Java邮件发送:复杂邮件发送
    使用javaMail发送简单邮件
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11276399.html
Copyright © 2011-2022 走看看