• swoft 使用协程 初试


    控制器访问 /hi

    /**
    	 * @SwoftBeanAnnotationMappingInject("UserService")
    	 * @var  UserService
    	 */
    	public $userService;
        /**
         * @RequestMapping("/")
         * @throws Throwable
         */
        public function index(): Response
        {
            /** @var Renderer $renderer */
            $renderer = Swoft::getBean('view');
            $content  = $renderer->render('home/index');
    
            return context()->getResponse()->withContentType(ContentType::HTML)->withContent($content);
        }
    
        /**
         * @RequestMapping("/hi")
         *
         * @return Response
         */
        public function hi()
        {
    		return $this->userService->test();
        }
    

      

    调用service  里面使用协程 最终访问前端页面 立马返回了 数据 

    UserService.php

    <?php
    
    
    namespace AppService;
    use function foofunc;
    use SwoftBeanAnnotationMappingBean;
    use SwoftCo;
    use SwoftLogHelperCLog;
    
    
    /**
     * Class UserService
     * @Bean("UserService")
     * @package AppService
     */
    class UserService
    {
    	public function __construct()
    	{
    		
    	}
    	
    	public function test()
    	{
    		Co::create(function(){
    			Co::sleep(10);
    			for($i=0;$i<10;$i++){
    				CLog::info("hello");
    			}
    
    		});
    
    		Co::create(function(){
    			Co::sleep(20);
    			var_dump("world");
    		});
    
    		$id = Co::id();
    		var_dump($id);
    		$id = Co::tid();
    		var_dump($id);
    		return "nihao";
    	}
    
    }
    

      

    过了十秒 和二十秒后分别打印出了数据

    erver start success (Master PID: 18085, Manager PID: 18090)
    int(2)
    int(2)
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    2020/07/20-20:22:49 [INFO] AppServiceUserService:AppService{closure}(28) hello
    string(5) "world"
    

      

    改为帮助函数 

    sgo(function(){
    Co::sleep(10);
    for($i=0;$i<10;$i++){
    CLog::info("hello");
    }

    });

    srun

    启动协程并等待执行结束。

    public function test()
    {
    srun(function(){
    sgo(function(){

    for($i=0;$i<10;$i++){
    Co::sleep(1);
    CLog::info("hello");
    }

    });

    sgo(function(){
    for($i=0;$i<10;$i++){
    Co::sleep(1);
    CLog::warning("hello");
    }
    });

    return true;

    });


    $id = Co::id();
    var_dump($id);
    $id = Co::tid();
    var_dump($id);
    return "nihao";
    }
  • 相关阅读:
    为什么要用设计模式?先看看6大原则(一)
    git版本库的创建和yaf框架环境的部署
    laravel日常小问题
    Session store not set on request.
    phpstudy集成环境安装lavarel
    html中提交表单并实现不跳转页面处理返回值
    document load 与document ready的区别
    定时器优化
    放大镜
    子组件调用父组件的方法并传递数据
  • 原文地址:https://www.cnblogs.com/brady-wang/p/13347515.html
Copyright © 2020-2023  润新知