Easyswoole 协程上下文管理 Context

2020-05-03  本文已影响0人  骑蚂蚁上高速_jun

在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));
        });
        // 同理也可以在 协程其他作用域中获取
        
上一篇 下一篇

猜你喜欢

热点阅读