1.Swoole 4.0 ܐᑕ قෛጱPHPᖫᑕཛྷୗ @hantianfeng Rango-ᶥॠશ
2.ړՁٖ 一. Go + Chan 全新協程程式設計模式 二. Swoole 4.0 新版本協程實作原理 三. Swoft 協程架構的使用
3.01 Swoole 4.0
4.• 串行程式設計 • fun1 要等待 fun2 執行完畢 • 總耗時 2 秒 • 如何實作并發程式設計?
5.建立 回收 通信方式 資源消耗 并發能力 程式設計難度 多程序 fork wait IPC 程序間通信 程序切換開銷 數百 困難 多線程 pthread_create pthread_join 資料同步/鎖 程序切換開銷 數千 非常困難
6.Coroutine
7.建立 回收 通信方式 資源消耗 并發能力 程式設計難度 多程序 fork wait IPC 程序間通信 程序切換開銷 數百 困難 多線程 pthread_create pthread_join 資料同步/鎖 程序切換開銷 數千 非常困難 協程 go array/chan 非常低 50萬 容易
8.• 并發程式設計 • fun1 和 fun2 并發執行 • 總耗時 1 秒
9.
10.建立 Socket 綁定端口并監聽 Accept 連接配接 建立新的協程處理 接收資料并響應 協程退出
11.ܐᑕ 1. 使用者态線程,遇到 IO 主動讓出 2. PHP 代碼依然是串行執行的,無需加鎖 3. 開銷極低,僅占用記憶體,不存在程序/線程切換開銷 4. 并發量大,單個程序可開啟 50W 個協程 5. 随時随地,隻要你想并發,就調用 go 建立新協程
12.
13.SplQueue new SplQueue $queue->push $queue->pop push 永遠可用,持續寫記憶體 pop 無可用資料時傳回 false Chan new chan() 緩存/無緩存 $chan->push $chan->pop push 容量不足是挂起協程 pop 無可用資料時挂起協程
14.᭗᭲ 1. 資料流轉 2. 協程管理 3. 并發依賴管理 4. 多個 chan 可以使用chan::select進行讀寫判斷
15.Http 請求 Http 請求 發送響應
16.協程元件 Co\Socket 說明 Socket 的封裝 Co\Client TCP/UDP/UnixSocket用戶端 Co\Http\Client Http和WebSocket用戶端 Co\Http2\Client Http2用戶端 Co\MySQL MySQL用戶端 Co\Redis Redis用戶端Co::sleep睡眠Co::readFile/Writefile讀寫檔案 同步阻塞 API Sockets/Stream Sockets/Stream CURL/file_get_contents CURL/GRPC mysqli/PDO redis usleep/sleep fread/fwrite
17.02 協程實作
18.2.0 setjmp/longjmp 3.0 EG(vm_interrupt) 4.0 libco
19.Swoole 2.0 3.0 ጱੴᴴ 1. 不支援 call_user_func, array_map, 魔術方法,反射方法 2. 不支援擴充 zend_call_function 3. 很多第三方庫,使用了複雜的設計模式,不可控
20.Swoole 4.0 1. 100% 支援所有 PHP 文法,包括魔術方法、反射、call_func 2. 完整的 C 棧 (基于微信開源的 libco)+ PHP 棧 3. 前置 SysCall Hook,可将 PHP 的同步用戶端,如 mysqli/ pdo/file_get_contents/sleep/fread 無縫切換為協程模式 (Swoole 5.0)
21.
22.swoole_coroutine.cc • co_create • co_yield • co_resume • co_close
23.03 Swoft 架構
24.Swoft 1. 完全基于 Swoole 的純協程架構 2. Composer 元件化,完全遵循 PSR 規範 3. 依賴注入,容器,元件,連接配接池,AOP(面向切面程式設計) 4. 支援 Web 開發、微服務治理 5. Docker 支援
25.
26.Swoft 支援的伺服器 1. swoft-http-srever :高并發純協程 Web 應用程式 2. swoft-websocket-server :長連接配接通信伺服器 3. swoft-rpc-server :微服務治理
27.
28.
29.控制器與 URL 映射 URL 路由 GET 參數映射
30.Swoft 微服務 1. 服務熔斷 2. 服務降級 3. 服務注冊與發現(基于 consul) 4. 負載均衡
31.Swoft EasySwoole Swoole 框 架 PHP-MSF SwooleDistributed
32.Blink ZPHP Swoole 架構 GroupCo FastD
33.MixPHP LaravelS Swoole 架構 Yii-Swoole Yaf-Swoole
34.THANK YOU PHPCON ਥᗑғwww.phpconchina.com ق᮱ PPT ӥғhttps://github.com/ThinkDevelopers/PHPConChina- ๗இٚᥠ- Q & A ਥොQQᗭғ34449228̵135615537 ਥොلռݩғThinkInLAMP