php 如何从go函数协程返回响应

pb3s4cty  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(120)

我使用Laravel Swoole Coroutine go函数来执行HTTP请求,以获得更好的性能。当我从外部服务获得响应时,将在数据库中创建一个新条目,其中包含来自外部服务的数据。
我希望能够从控制器返回一个带有新DB记录的响应。但是,似乎go之外的任何东西都无法访问go函数中分配的任何内容。我知道这是在一个单独的线程中发生的,但是有没有一种方法可以实现这一点,以便我可以访问go函数内部的结果?
请注意,我已经全局启用了协程,我只能使用如下所示的函数:

public function store(User $user, Request $request) {
   go(function () {
       // get data from external API using Laravel HTTP Client
       ...
       $user = User:create($data);
       return response($user, 201)->send();
   });
}

我试过使用WaitGroup(),但如果我用Co\run函数 Package 它,它会抱怨事件循环已经启动。

yuvru6vn

yuvru6vn1#

<?
co::run(function() {

    function a($par) {
        $ch = new Chan(1);

        go(function() use ($par, $ch) {
            $res = $par * 2;

            $ch->push($res);
        });

        $ret = $ch->pop();

        return $ret;
    }

    echo '='.a(3);
});

相关问题