温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

swoole协程如何开启

发布时间:2021-01-08 16:35:04 来源:亿速云 阅读:228 作者:小新 栏目:编程语言

小编给大家分享一下swoole协程如何开启,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

Swoole 2.0正式版发布了。2.0版本最大的更新是增加了对协程(Coroutine)的支持。正式版已同时支持PHP5和PHP7。

基于Swoole2.0协程PHP开发者可以已同步的方式编写代码,底层自动进行协程调度,转变为异步IO。

解决了传统异步编程嵌套回调的问题。

与Node.js(ES6+)、Python等语言使用yield/generator、async/await的实现方式相比,Swoole协程无需修改代码添加额外的关键词。

与Go语言的goroutine相比,Swoole协程是内置式的,应用层代码无需添加go关键词启动协程,只需要使用封装好的协程客户端即可,使用更简单。另外Swoole协程的IO组件在底层内置了超时机制,不需要使用复杂的select/chan/timer实现客户端超时。

目前Swoole底层内置的协程客户端组件包括:udpclient、tcpclient、httpclient、redisclient、mysqlclient,基本涵盖了开发者常用的几种通信协议。协程组件只能在服务器的onConnect、onRequest、onReceive、onMessage 回调函数中使用。

使用 swole 协程

如何使用协程:

使用 go()(\Swoole\Coroutine::create() 的简写) 创建一个协程

在 go() 的回调函数中, 加入协程需要执行的代码, 注意是 非阻塞代码

use Swoole\Coroutine as Co; // 常用的缩写方式

go(function () { // 创建协程, 回调函数中写需要在协程中执行的代码
    echo "daydaygo";
    Co::sleep(1); // 不能是阻塞代码
});

协程

上文提到的, 使用 go() 创建一个协程

swoole server 中, 底层自动在 onRequet, onReceive, onConnect 等事件回调之前自动创建一个协程

开启 enable_coroutine 参数后的影响范围: 主要还包括 Timer 定时器

使用 task_enable_coroutine 开启的协程版 Task 进程, 会在 onTask 回调之前自动创建一个协程

进程和进程池支持开启协程, 开启后创建的子进程会自动创建协程

// tcp/udp server, 可以在此基础可封装 rpc
$s = new \Swoole\Server();
// http server, 替代传统的 fpm
$s = new \Swoole\Http\Server();
// 开启 http2 支持: https://wiki.swoole.com/wiki/page/326.html
$s = new \Swoole\Http\Server();
$s->set([
    'open_http2_protocol' => true,
]);
// 进而可以实现基于 http2 的服务, 比如 grpc
// websocket server
$s = new \Swoole\WebSocket\Server();

看完了这篇文章,相信你对“swoole协程如何开启”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI