swoole哪个版本支持php5

发布时间 - 2019-12-07 00:00:00    点击率:

Swoole 2.0正式版发布了。2.0版本最大的更新是增加了对协程(Coroutine)的支持。正式版已同时支持PHP5和PHP7。基于Swoole2.0协程PHP开发者可以已同步的方式编写代码,底层自动进行协程调度,转变为异步IO。

解决了传统异步编程嵌套回调的问题。    (推荐学习: swoole视频教程)

与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 回调函数中使用。

使用示例

$server = new Swoole\Http\Server('127.0.0.1', 9501);
/*
    触发on request事件时,SWOOLE会开辟一个协程栈,对协程栈进行初始化
 */
$server->on('Request', function ($request, $response) {
    $tcp_cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
    /**
        client在调用connect函数后,SWOOLE会将PHP上下文信息保存到当前栈内
        然后将协程挂起,待确认连接成功后,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行PHP代码
     */
    if ($tcp_cli->connect('127.0.0.1', 9906) === false) {
        $response->end("connect server failed.");
        return;
    }
    $tcp_cli->send('test for the coro');
    /*
        client在调用recv函数后,SWOOLE会将PHP上下文信息保存到当前栈内
        然后将协程挂起待后端svr回包,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行PHP代码
        如果后端在设定的超时时间内,未能回包,返回false
        client的errCode定为110
     */
    $ret = $tcp_cli->recv(100);
    $tcp_cli->close();
    if ($ret) {
        $response->end(" swoole response is ok");
    } else {
        $response->end(" recv failed error : {$tcp_cli->errCode}");
    }
});
$server->start();


# swoole  # 关键词  # 客户端  # 会将  # 回调  # 挂起  # 后端  # 不需要  # 时间内  # 几种  # 只需要 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  怎么用AI帮你为初创公司进行市场定位分析?  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel怎么使用Intervention Image库处理图片上传和缩放  EditPlus中的正则表达式实战(5)  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Linux系统命令中tree命令详解  如何快速搭建安全的FTP站点?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何快速搭建高效香港服务器网站?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  大同网页,大同瑞慈医院官网?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  如何在宝塔面板中修改默认建站目录?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何用腾讯建站主机快速创建免费网站?  如何选择可靠的免备案建站服务器?  中山网站推广排名,中山信息港登录入口?  如何用花生壳三步快速搭建专属网站?  再谈Python中的字符串与字符编码(推荐)  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  iOS中将个别页面强制横屏其他页面竖屏  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  网站优化排名时,需要考虑哪些问题呢?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何在建站宝盒中设置产品搜索功能?  Windows Hello人脸识别突然无法使用  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  如何在橙子建站上传落地页?操作指南详解  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  详解阿里云nginx服务器多站点的配置  郑州企业网站制作公司,郑州招聘网站有哪些?  Laravel如何实现文件上传和存储?(本地与S3配置)  如何用搬瓦工VPS快速搭建个人网站?  Android滚轮选择时间控件使用详解  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Swift开发中switch语句值绑定模式  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel如何实现用户密码重置功能?(完整流程代码)  JS实现鼠标移上去显示图片或微信二维码  如何用低价快速搭建高质量网站?