swoole-1.8.0 發布,PHP 的異步并行 C 擴展
Swoole-1.8.0 版本已發布,此版本是一個里程碑式新版本,新增了多項新特性、多項核心功能優化以及問題修復、移除了無效的特性。更新內容如下:
客戶端
-
增加原生異步 MySQL 客戶端
-
增加原生異步 Redis 客戶端,基于 Redis 官方提供的 hiredis 庫
-
增加原生異步 Http 客戶端
-
增加原生異步 WebSocket 客戶端支持
-
重構底層 swClient,異步 TCP 客戶端實現放到 swoole 內核中
-
增加 swoole_client->reuse 屬性,SWOOLE_KEEP 長連接模式下標識是否為復用的連接
服務器端
-
重構 websocket 服務器代碼,底層與 length_check 協議復用相同的處理函數,增強穩定性
-
增加 Task 進程對 tick/after 定時器的支持,底層基于高精度的 setitimer+ 信號實現
-
保存構造函數中傳入的 host、port 參數到 swoole_server 對象屬性
-
增加多端口多協議的支持(重要更新)
-
增加 swoole_server->defer 函數用于延時執行一些函數
-
增加 swoole_server->close 強制切斷連接的選項,設置第二個參數會 true 會清空發送隊列并立即切斷連接
多端口多協議示例:
$serv = new swoole_server("0.0.0.0", 9501); $port2 = $serv->listen('127.0.0.1', 9502, SWOOLE_SOCK_TCP); $port2->set(array( 'open_length_check' => true, 'package_length_type' => 'N', 'package_length_offset' => 0, //第N個字節是包長度的值 'package_body_offset' => 4, //第幾個字節開始計算長度 'package_max_length' => 2000000, //協議最大長度 )); $port2->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { echo "ServerPort2\n"; }); $serv->on('connect', function ($serv, $fd, $from_id){ echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Connect.\n"; }); $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) { echo "[#".$serv->worker_id."]\tClient[$fd]: $data\n"; if ($serv->send($fd, "hello\n") == false) { echo "error\n"; } }); $serv->on('close', function ($serv, $fd, $from_id) { echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Close.\n"; }); $serv->start();
其他
-
增加swoole_table對key值的存儲,foreach遍歷table時可以獲取到key值
-
更改swoole_table的key對比模式,從crc32比對改為直接進行字符串對比
-
更新utlist.h庫到1.9.9版本
swoole_table保存Key值會增加內存占用,如table的size為100萬,KEY值存儲會增加64M內存占用
問題修復
-
修復啟用消息隊列后發生double-free問題
-
重構定時器,修復after、tick定時器偶然出現的core dump的問題
-
定時器使用最小堆數據結構,插入/刪除時間復雜度為log(N)
-
修復swoole_process::signal在PHP7下發生core dump的問題
-
修復swoole_async_write在PHP7下發生core dump的問題
移除特性
-
移除未支持的特性相關歷史遺留代碼,如heartbeat_ping、dispatch_key_type等
-
移除swoole_server->addtimer、swoole_server->deltimer、swoole_server->gettimer
-
移除swoole_timer_add、swoole_timer_del
-
移除swoole_server的onTimer事件
-
移除task_worker_max配置及相關特性代碼
-
移除swoole_server->handler方法
來自: http://www.oschina.net//news/70266/swoole-1-8-0