重大新特性
支援 Redis/PDO/MySQLi
從
4.1.0
版本開始支援了對
PHP
原生
Redis
、
PDO
MySQLi
協程化的支援。
可使用
Swoole\Runtime::enableCorotuine()
将普通的同步阻塞
Redis
PDO
MySQLi
操作變為協程排程的異步非阻塞
IO
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();
});
協程跟蹤
新版本增加了兩個方法用于跟蹤協程運作。
-
可周遊目前所有協程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]
其他修改
- 重構
C底層代碼為C++, 解決複雜場景的非預期結果, 實作高穩定Co\Channel
-
C底層代碼為C++協程模式, 解決異步時序問題, 實作高穩定Co\Http\Client
- 支援在協程和Server中使用
, 此時将會抛出可捕獲的exit
異常\Swoole\ExitException
- 移除所有疊代器(table/connection/coroutine_list)的PCRE依賴限制
- 增加
配置, 可以在onMessage事件中接收close幀open_websocket_close_frame
- 廢棄
方法,改為使用Http\Response->gzip()
配置項。底層會自動判斷用戶端傳入的http_compression
選擇合适的壓縮方法, 新增谷歌BR壓縮支援Accept-Encoding
-
方法,可将記憶體中的資料作為上傳檔案内容進行發送Co\Http\Client->addData()
-
系統支援Solaris
- Http2支援
分幀發送和MAX_FRAME_SIZE
處理, 用戶端增加MAX_HEADER_LIST_SIZE
方法檢測是否存在對應流isStreamExist
-
swoole_http_response->status
參數reason
- 修複MySQL prepare 中無符号參數使用了有符号值導緻數值溢出的問題
- 修複HTTP2的
回調中沒有協程的問題onRequest
- 修複
某些特殊情況下變為tasking_num
的問題-1
- 修複HTTP2-server的window-update幀構造錯誤
- 修複所有PHP版本下的所有級别的編譯warning
- GCC版本小于4.8時将會産生編譯錯誤
- 修複MySQL使用prepare時未使用參數綁定導緻的記憶體配置設定不斷增長
- 修複HTTP2重連時舊stream記憶體丢失洩露
底層開發相關
- 統一檔案命名 #970
-
使用了Co\Http\Client
和create_obj
保證記憶體安全, 防止錯誤的PHP代碼引發記憶體問題free_obj