swoole 协程

浪尽此生 提交于 2020-01-07 18:58:11

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

php 协程的使用 

异步代码 5秒
<?php
$c = 10;
while($c--) {
    echo $c;
    go(function () {
        //这里使用 sleep 5 来模拟一个很长的命令
        echo "aaa\n";
        co::exec("sleep 5");
    });
}





同步代码   50秒
<?php
$c = 10;
while($c--) {
    echo $c;
    //这里使用 sleep 5 来模拟一个很长的命令
    shell_exec("sleep 5");
}

php swooler_co_exec.php 

php swooler_shell_exec.php 

 

协程chan通道

<?php
$chan = new chan(2);

# 协程1
go (function () use ($chan) {
    $result = [];
    for ($i = 0; $i < 5; $i++)
    {
        $result += $chan->pop();
    }
    var_dump($result);
});

# 协程2
go(function () use ($chan) {
    $cli = new Swoole\Coroutine\Http\Client('www.qq.com', 80);
    $cli->set(['timeout' => 10]);
    $cli->setHeaders([
    'Host' => "www.qq.com",
    "User-Agent" => 'Chrome/49.0.2587.3',
    'Accept' => 'text/html,application/xhtml+xml,application/xml',
    'Accept-Encoding' => 'gzip',
    ]);
    $ret = $cli->get('/');
    // $cli->body 响应内容过大,这里用 Http 状态码作为测试
    sleep(1);
    $chan->push(['www.qq.com' => $cli->statusCode]);
});

# 协程3
go(function () use ($chan) {
    $cli = new Swoole\Coroutine\Http\Client('www.163.com', 80);
    $cli->set(['timeout' => 10]);
    $cli->setHeaders([
        'Host' => "www.163.com",
        "User-Agent" => 'Chrome/49.0.2587.3',
        'Accept' => 'text/html,application/xhtml+xml,application/xml',
        'Accept-Encoding' => 'gzip',
    ]);
    $ret = $cli->get('/');
    // $cli->body 响应内容过大,这里用 Http 状态码作为测试
    $chan->push(['www.163.com' => $cli->statusCode]);
    $chan->push(['www.1.com' => 1]);
    $chan->push(['www.2.com' => 1]);
    $chan->push(['www.3.com' => 1]);
    $chan->push(['www.4.com' => 1]);
});


Swoole\Runtime::enableCoroutine();

go(function () {
    echo "a";
    defer(function () {
        echo "~a";
    });
    echo "b";
    defer(function () {
        echo "~b";
    });
    sleep(1);
    echo "c";
});

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!