swoole协程如何使用,开启及创建协程操作是什么
Admin 2022-09-13 群英技术资讯 898 次浏览
Swoole 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();
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP实现重载功能的方法有很多,这篇文章给大家分享的是用 __call方法实现重载。小编觉得挺实用的,因此分享给大家做个参考,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
今天小编就为大家分享一篇Laravel timestamps 设置为unix时间戳的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
在laravel中,使用队列可以解决大并发和多种语言通信接口等问题。可以将耗时的任务或者不能同时大量并行的任务封装起来传输到消息队列中,由处理程序不断从消息队列中提取消息并进行处理,这样用过消息队列就可以使得在大并发情况下不再堵塞。
sort()定义和用法 sort()函数按升序对给定数组的值排序。 注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。 如果成功则返回TRUE...
swoole能设置多个定时器,swoole定时器的最小颗粒是1秒。支持多个定时器。注意不能存在2个相同间隔时间的定时器。 增加定时器后需要写一个回调函数。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008