协程的基本概念及基础使用
什么是协程
**协程可以理解为用户态的线程。**相对于进程或线程而言,协程的所有操作都可以在用户态下完成,不需要操作系统参与,其创建销毁和切换的成本非常低。与线程不同的是协程无法利用多核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
请登录后再评论