Swoole 4.0 正式版,面向生產環境的 PHP 協程引擎

Swoole雖然在2016年就支持了協程特性,但因爲底層是基於setjmp/longjmp實現的stackless方案。所以在某些場景下,如call_user_funcarray_map__destruct中沒法使用協程。大型應用程序中邏輯很是複雜,多人協做的團隊中,開發者很容易踩到坑。在禁止場景中使用協程API會出現各類莫名其妙的問題發生。限制了協程的應用範圍。php

新版本4.0基於boost.context 1.60彙編代碼實現了全新的協程內核。在保存PHP函數調用棧的基礎上,增長了C棧的上下文存儲。實現了對全部PHP語法的支持。如今在任意PHP的函數,包括call_user_func、反射、魔術方法、array_map中都可使用協程。git

如今能夠在PHP代碼中任意位置使用協程,開發者再也不須要擔憂使用場景問題。4.0版本咱們與SwooleDistributed/Swoft/EasySwoole等框架做者進行了緊密合做,在大量項目中進行了灰度試用。穩定性和健壯性均已達到工業級的水準。徹底可用於大型項目的生產環境中。github

go(function() {
    array_map("test", array("func start\n"));
    echo "co end\n";
});  
function test($p) {
    echo $p;
    co::sleep(1);
    echo "func end \n";
}
4.0分支使用了 C++11標準,建議使用 gcc-4.8或更高版本。

全局變量隔離

新版本中底層對全局變量進行了隔離,如今可使用Swoole\Process建立多個Swoole\Server實例了。瀏覽器

for ($i = 0; $i < 2; $i++)
{
    $p = new swoole_process(function () use ($i) {
        $port = 9501 + $i;
        $http = new swoole_http_server("127.0.0.1", $port);

        $http->on("start", function ($server) use ($port) {
            echo "Swoole http server is started at http://127.0.0.1:{$port}\n";
        });

        $http->on("request", function ($request, $response) {
            $response->header("Content-Type", "text/plain");
            $response->end("Hello World\n");
        });

        $http->start();
    }, false, false);
    $p->start();
}

其餘更新

  • 修復http2服務器沒法向Chrome瀏覽器客戶端發送超過16K數據的問題
  • 修復BASE模式下Task進程沒法重啓的問題
  • 增長Channel->peek方法,用於窺視數據
  • 修復Server->pause/resumeSWOOLE_PROCESS下沒法使用的問題
  • 移除Linux AIO,如今不管如何設置都使用線程池實現異步文件IO
  • 支持MySQL存儲過程

下載 4.0

相關文章
相關標籤/搜索