美文网首页
Easyswoole 协程上下文管理 Context

Easyswoole 协程上下文管理 Context

作者: 骑蚂蚁上高速_jun | 来源:发表于2020-05-03 19:49 被阅读0次

    在swoole中,由于多个协程是并发执行的,因此不能使用类静态变量/全局变量保存协程上下文内容。使用局部变量是安全的,因为局部变量的值会自动保存在协程栈中,其他协程访问不到协程的局部变量。

    在原生 swoole 中使用协程上下文管理

    Co\run(function(){
          $cid = Co::getCid(); // 得到当前协程id
          $context = Co::getContext($cid=null); 不传递 $cid,默认是当前协程id
          // 保存属性到 协程上下文 Context 中
          $context["a"] = 1; 
          $context["b"] = 2;
          //  在子协程中获取 示例
          go(function(){
                  $cid = Co::getPcid(); // 获取父协程id
                  $context = Co::getContext($cid);  // 得到 父协程中的 $context 变量
          });
          // 在父协程的另外一个作用域获取案例
          function  test():string{
            $cid = Co::getCid();
    
            $data = Co::getContext($cid);
            var_dump($data);
            return time()."  -> 111\n";
        }
    });
    
    

    Easyswoole 协程上下文管理

    // 当前父协程中设置属性
            \EasySwoole\Component\Context\ContextManager::getInstance()->set("a",new \stdClass(),$cid=null);
            \EasySwoole\Component\Context\ContextManager::getInstance()->set("b",1,$cid=null);
    
            go(function(){
                // 可以在子协程中获取
                var_dump(\EasySwoole\Component\Context\ContextManager::getInstance()->get("a",$cid=null));
            });
            // 同理也可以在 协程其他作用域中获取
            
    

    相关文章

      网友评论

          本文标题:Easyswoole 协程上下文管理 Context

          本文链接:https://www.haomeiwen.com/subject/madjghtx.html