Swoole
雖然在2016
年就支持了協程特性,但因爲底層是基於setjmp/longjmp
實現的stackless
方案。所以在某些場景下,如call_user_func
、array_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/resume
在SWOOLE_PROCESS
下沒法使用的問題Linux AIO
,如今不管如何設置都使用線程池實現異步文件IO
MySQL
存儲過程