Swoole Coroutine协程 持续更新

Swoole Coroutine协程 持续更新

  • redis
  • mysql

协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。Swoole可以为每一个请求创建对应的协程,根据IO的状态来合理的调度协程,这会带来了以下优势:

  1. 开发者可以无感知的用同步的代码编写方式达到异步IO的效果和性能,避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护
  2. 同时由于底层封装了协程,所以对比传统的PHP层协程框架,开发者不需要使用yield关键词来标识一个协程IO操作,所以不再需要对yield的语义进行深入理解以及对每一级的调用都修改为yield,这极大的提高了开发效率

redis

redis.php

$http = new swoole_http_server('0.0.0.0',9906);
$http->on('request', function ($request, $response) {
	go(function() {
	    $redis = new Swoole\Coroutine\Redis();
	    $redis->connect('127.0.0.1',6379);
	    $value = $redis->get($request->get['key']);
	    $response->end($value);
    });
});
$http->start();

mysql

mysql.php

go(function() {
    $swoole_mysql = new Swoole\Coroutine\MySQL();
    $swoole_mysql->connect([
        'host' => '127.0.0.1',
        'port' => 3306,
        'user' => 'root',
        'password' => 'root',
        'database' => 'testzc',
        'charset' => 'utf8', //指定字符集
        'timeout' => 2,  // 可选:连接超时时间(非查询超时时间),默认为SW_MYSQL_CONNECT_TIMEOUT(1.0)
    ]);
    $sql = "select * from test";
    $res = $swoole_mysql->query($sql);

    if($res === false) {
        return;
    }
    foreach ($res as $value) {
        print_r($value);
    }
});

其实swoole中的 go 函数,
go() 是 Swoole\Coroutine::create() 的缩写,
可以创建一个协程

你可能感兴趣的:(工具使用,原创)