從4.1.0
版本開始支持了對PHP
原生Redis
、PDO
、MySQLi
協程化的支持。php
可以使用Swoole\Runtime::enableCorotuine()
將普通的同步阻塞Redis
、PDO
、MySQLi
操做變爲協程調度的異步非阻塞IO
git
Swoole\Runtime::enableCoroutine(); go(function () { $redis = new redis; $retval = $redis->connect("127.0.0.1", 6379); var_dump($retval, $redis->getLastError()); var_dump($redis->get("key")); var_dump($redis->set("key", "value")); $redis->close(); });
新版本增長了兩個方法用於跟蹤協程運行。github
Coroutine::listCoroutines()
可遍歷當前全部協程Coroutine::getBackTrace($cid)
可獲取某個協程的函數調用棧function test1() { test2(); } function test2() { while(true) { co::sleep(10); echo __FUNCTION__." \n"; } } $cid = go(function () { test1(); }); go(function () use ($cid) { while(true) { echo "BackTrace[$cid]:\n-----------------------------------------------\n"; //返回數組,須要自行格式化輸出 var_dump(co::getBackTrace($cid))."\n"; co::sleep(3); } });
BackTrace[1]: ----------------------------------------------- #0 Swoole\Coroutine::sleep(10) called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:8] #1 test2() called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:3] #2 test1() called at [/home/htf/workspace/swoole/examples/coroutine/backtrace.php:14]
Co\Channel
C底層代碼爲C++, 解決複雜場景的非預期結果, 實現高穩定Co\Http\Client
C底層代碼爲C++協程模式, 解決異步時序問題, 實現高穩定exit
, 此時將會拋出可捕獲的\Swoole\ExitException
異常open_websocket_close_frame
配置, 能夠在onMessage事件中接收close幀Http\Response->gzip()
方法,改成使用http_compression
配置項。底層會自動判斷客戶端傳入的Accept-Encoding
選擇合適的壓縮方法, 新增谷歌BR壓縮支持Co\Http\Client->addData()
方法,可將內存中的數據做爲上傳文件內容進行發送Solaris
系統支持MAX_FRAME_SIZE
分幀發送和MAX_HEADER_LIST_SIZE
處理, 客戶端增長isStreamExist
方法檢測是否存在對應流swoole_http_response->status
增長reason
參數onRequest
回調中沒有協程的問題tasking_num
某些特殊狀況下變爲-1
的問題Co\Http\Client
使用了create_obj
和free_obj
保證內存安全, 防止錯誤的PHP代碼引起內存問題