swoole-1.8.0 發布,PHP 的異步并行 C 擴展

jopen 8年前發布 | 13K 次閱讀

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!