easyswoole - 基于swoole扩展实现的一款高性能php框架

協(xié)程

4.0 版本開始 Swoole 提供了完整的協(xié)程(Coroutine)+ 通道(Channel)特性,帶來全新的 CSP 編程模型。應用層可使用完全同步的編程方式,底層自動實現(xiàn)異步IO。

協(xié)程可以理解為純用戶態(tài)的線程,其通過協(xié)作而不是搶占來進行切換。相對于進程或者線程,協(xié)程所有的操作都可以在用戶態(tài)完成,創(chuàng)建和切換的消耗更低。Swoole 可以為每一個請求創(chuàng)建對應的協(xié)程,根據(jù) IO 的狀態(tài)來合理的調度協(xié)程,這會帶來了以下優(yōu)勢:

  • 開發(fā)者可以無感知的用同步的代碼編寫方式達到 異步IO 的效果和性能,避免了傳統(tǒng)異步回調所帶來的離散的代碼邏輯和陷入多層回調中導致代碼無法維護;
  • 同時由于底層封裝了協(xié)程,所以對比傳統(tǒng)的 PHP 層協(xié)程框架,開發(fā)者不需要使用 yield 關鍵詞來標識一個 協(xié)程IO操作,所以不再需要對 yield 的語義進行深入理解以及對每一級的調用都修改為 yield,這極大地提高了開發(fā)效率;
  • 可以滿足大部分開發(fā)者的需求。對于私有協(xié)議,開發(fā)者可以使用協(xié)程的 TCP 或者 UDP 接口去方便的封裝。

注意事項

  • 全局變量:協(xié)程使得原有的異步邏輯同步化,但是在協(xié)程中的切換是隱式發(fā)生的,所以在協(xié)程中切換的前后不能保證 全局變量 以及 static 變量 的一致性。
  • swoole 協(xié)程與 xdebug、xhprof、blackfirezend 擴展不兼容,例如不能使用 xhprof協(xié)程 server 進行性能分析采樣。

在 EasySwoole 中使用和創(chuàng)建協(xié)程

當提示類似 PHP Fatal error: Uncaught Swoole\Error: API must be called in the coroutine in /root/easyswoole/test_coroutine.php:7 錯誤時,說明該 API 必須在協(xié)程環(huán)境下使用。那該如何創(chuàng)建協(xié)程環(huán)境呢?其實很簡單,我們只需要這樣寫 \Swoole\Coroutine::create(function () { // 這里面就是協(xié)程環(huán)境 });\Swoole\Coroutine\run(function() { // 這里面就是協(xié)程環(huán)境 });go(function() { // 這里面就是協(xié)程環(huán)境});,上述提到的三種方式均可用于創(chuàng)建協(xié)程環(huán)境。只需把調用代碼寫在匿名閉包函數(shù)里即可調用上述錯誤提到的 API。

EasySwoole 框架主進程中使用協(xié)程

這里所說的主進程主要指的是在 EasySwoole 服務啟動前調用協(xié)程 API 的需求,包括在 EasySwoolebootstrap 事件initialize 事件、mainServerCreate 事件 中使用協(xié)程。關于前文提到的事件詳細請看 全局事件

簡單使用示例如下:

<?php
$scheduler = new \Swoole\Coroutine\Scheduler();
$scheduler->add(function() {
    /* 調用協(xié)程API */

    // 用戶可以在這里調用上述協(xié)程 API

});
$scheduler->start();
// 清除全部定時器
\Swoole\Timer::clearAll();

EasySwoole 框架 Worker 進程中使用協(xié)程

這里所說的 Worker 進程是指 EasySwoole 服務啟動之后的進程中調用協(xié)程 API 的需求,主要包括在 自定義進程 等進程中調用協(xié)程 API。注意:在 Http 控制器 中如果是處于 api 接口環(huán)境下就已經(jīng)是協(xié)程環(huán)境了??梢院唵卫斫鉃楫斠粋€請求進來的時候 swoole 底層就自動創(chuàng)建了一個協(xié)程去處理這個請求,所以這個請求里的處理邏輯其實已經(jīng)是在協(xié)程環(huán)境下了。

簡單使用示例如下:

<?php
\Swoole\Coroutine::create(function () {
    /* 調用協(xié)程API */

    // 用戶可以在這里調用上述協(xié)程 API
});

// 或者使用如下:
go(function() {
    /* 調用協(xié)程API */

    // 用戶可以在這里調用上述協(xié)程 API
});
主站蜘蛛池模板: 河北瑞峰医疗-河北护理床-河北医用病床-河北养老院护理床-河北护理床厂家-河北病床厂家-河北瑞峰医疗 | 南京三维动画制作公司,企业视频制作,视频拍摄,FLASH动画设计,宣传片拍摄,广告片制作 | 全自动灌装机械设备-迈驰粉末/颗粒/液体/膏体灌装机械设备流水线生产厂家 | 网络舆情_网络舆情监控系统_舆情监测软件_舆情监控平台-北鲲舆情 | 清洁公司| 保洁公司| 东莞清洁| 东莞保洁|壹壹清洁 | 铸铁平台-铸铁平板平台厂家-加工优质高精度检验划线装配T型槽平台-尺寸规格全供应-建新铸造 | 蒸汽孔板流量计-法兰式孔板流量计-一体化标准孔板流量计-金湖中原仪表有限公司 | 气象站_校园气象站_自动气象站_光伏气象站-山东万象环境科技有限公司 | 宁波允泰仪器有限公司-硬度计、拉力试验机、盐雾试验箱、影像测量仪、气动量仪 | 重庆晓宇餐饮文化管理有限公司_重庆晓宇火锅 | 万级无菌室-阳性对照室-干细胞实验室-广州沃霖实验室设备有限公司 | 抛丸机-H型钢结构抛丸机-钢板通过式抛丸机厂家-泓霖喷砂除锈设备 | 无线计量仪表-电力物联网仪表-CE认证电表 | 全网营销_网络推广外包_全网营销代运营公司-湖南微望互动 | 郑州空气能热水器,郑州空气能热水器经销商,郑州空气能热水器维修,郑州空气能热水器安装 | 龙淼环保-旋流-喷淋塔,高温布袋,脉冲布袋-单机-滤筒除尘器,活性炭吸附箱,催化燃烧设备,除尘器配件-沧州龙淼环保设备制造有限公司 | 湖南长沙智能实验室规划设计、整体建设、净化装修、改造施工公司-福临建设 | 名嘉宴会【官网】_宁波冷餐_宁波茶歇_宁波酒会_宁波自助餐_宁波盛世名嘉宴会服务有限公司 | 江西挤塑板_挤塑板厂家_挤塑板价格-江合保温材料 | 捏炼机_密炼机_炼胶机_平板硫化机-青岛光越橡胶机械制造有限公司 | 自装卸(挂桶)车|钩臂垃圾车|压缩垃圾车|密封自卸车|环卫垃圾车|餐厨车泔水车湖北程力专用车厂家 自建房外墙砖|地砖|墙砖,农村|别墅瓷砖-佛山燊陶丰 | 新乡市大成数控机械有限公司| 铸铁型材_灰铁棒_球铁棒_圆铁棒生产厂家★河北起昌精密装备制造有限公司 | 皮革耐折试验机-消字率测试仪-面具全视野测试仪-东莞市誉扬检测仪器有限公司 | 火绒杀毒软件|火绒安全企业版_西南|四川|重庆|贵州|云南|西藏|成都火绒服务中心_成都火影科技有限公司-火绒安全|成都火影科技|火绒 | 卫生间隔断-东莞卫生间隔断-东莞卫生间隔断厂家-公共卫生间隔断-东莞市康丰家居建材有限公司 | 上海物业管理_写字楼物业管理_厂房物业管理_上海企福物业管理有限公司 | 台式氙灯老化箱-光伏组件-真空老化试验箱|中科万通仪器官网 | 无锡今飞激光技术有限公司-手持激光焊接机_激光打标机_激光清洗机_平台激光焊接机_焊接专机- | 学汽修,汽修培训,西安汽车维修培训学校,西安万通汽车学校[官网] 削片机|木材破碎机|木材粉碎机|模板破碎机|双轴撕碎机_郑州木工机械制造厂 | 河北安润防腐管业股份有限公司-远程供液管路_远距离供液管路_远程供液系统 | 钻机配件-岩心管-岩心管接箍-地质套管-煤矿用钻头-河南滨远机械设备有限公司 | 江苏华海诚科新材料有限公司、连云港华海诚科新材料有限公司、连云港新材料 | 猴脑立体定位仪-无菌动物隔离器-格罗贝尔百科 | 美国SI中国区总代-北京开源国创科技有限公司| 精馏塔_甲醇回收塔_糠醛塔-无锡弘鼎华化工设备有限公司 | 莱湾科技-智能会议室|多功能|多媒体|音视频|无纸化|远程视频会议室运维 | 长沙广告设计公司|长沙广告制作|湖南户外广告制作|商业美陈就找湖南盛翔文化传媒有限公司老品牌高品质 | 山东邹平华强无纺布有限公司 | 新高度,萍乡市场调查研究公司,萍乡市场调研公司,萍乡第三方评估机构,萍乡神秘顾客暗访公司 | 吉林人才网_吉林招聘网_求职找工作平台|