协程的基本概念及基础使用

作者: 温新

分类: 【高性能PHP】

阅读: 1746

时间: 2021-04-23 15:29:46

什么是协程

**协程可以理解为用户态的线程。**相对于进程或线程而言,协程的所有操作都可以在用户态下完成,不需要操作系统参与,其创建销毁和切换的成本非常低。与线程不同的是协程无法利用多核CPU,若想利用多核CPU则需要依赖Swoole的多进程模型。

扩展:

什么是用户态?用户态:运行应用进程;

什么是内核态?内核态:运行操作系统。

协程基本使用案例

创建Swoole TCP服务器端

文件:dserver.php

<?php

$ser = new \Swoole\Server("192.168.172.130", 9502);

// 监听客户端消息
$ser->on('Receive', function ($serv, $fd, $reactor_id, $data) {
    // 向客户端发送消息
    $serv->send($fd, 'Swoole: ' . $data);
    $serv->close($fd);
});

$ser->start();

启动tcp服务器端

php dserver.php

创建Swoole协程客户端

文件:d12.php

<?php

use Swoole\Coroutine\Client;
use function Swoole\Coroutine\run;

// run函数创建协程
run(function () {
    // 创建协程TCP客户端
    $client = new Client(SWOOLE_SOCK_TCP);
    // 连接失败
    if (!$client->connect('192.168.172.130', 9502, 0.5)){
        echo "connect failed. Error: {$client->errCode}\n";
    }
    // 向服务器端发送消息
    $client->send("hello server, i am client\n");
    // 接收服务器返回的消息
    echo $client->recv();
    
    $client->close();
});

运行

php d12.php
    
// 结果
Swoole: hello server, i am client

协程适应场景

高并发服务,如秒杀系统、调性能API接口、RPC服务器;

即时通信服务,如IM聊天、游戏服务器、物联网等。

2021-04-13

请登录后再评论