摘要:的異步并行高性能網絡通信引擎已發布版本。新版本提供了全新的短名,完整支持了協程通道特性,為語言帶來了全新的編程模式。的借鑒至語言,在此向語言開發組致敬。其他服務器端提供了很多共個支持協程的類,可以在這些服務器程序中使用協程。
PHP的異步、并行、高性能網絡通信引擎 Swoole 已發布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了協程(Coroutine)+通道(Channel)特性,為 PHP 語言帶來了全新的編程模式。Swoole 2.1的API借鑒至Go語言,在此向Go語言開發組致敬。
Coroutinego(function () { co::sleep(0.5); echo "hello"; }); go("test"); go([$object, "method"]);Channel
$chan = new chan(128); $chan->push(1234); $chan->push(1234.56); $chan->push("hello world"); $chan->push(["hello world"]); $chan->push(new stdclass); $chan->push(fopen("test.txt", "r+")); while($chan->pop());
與Go語言的chan不同,由于PHP是動態語言,所以可以向通道內投遞任意類型的變量。
Channel Select$c1 = new chan(3); $c2 = new chan(2); $c3 = new chan(2); $c4 = new chan(2); $c3->push(3); $c3->push(3.1415); $c4->push(3); $c4->push(3.1415); go(function () use ($c1, $c2, $c3, $c4) { echo "select "; for ($i = 0; $i < 1; $i++) { $read_list = [$c1, $c2]; $write_list = [$c3, $c4]; // $write_list = null; $result = chan::select($read_list, $write_list, 5); var_dump($result, $read_list, $write_list); foreach($read_list as $ch) { var_dump($ch->pop()); } foreach($write_list as $ch) { var_dump($ch->push(666)); } echo "exit "; } }); go(function () use ($c3, $c4) { echo "producer "; co::sleep(1); $data = $c3->pop(); echo "pop[1] "; var_dump($data); }); go(function () { co::sleep(10); }); go(function () use ($c1, $c2) { co::sleep(1); $c1->push("resume"); $c2->push("hello"); });MySQL Client
go(function () { $db = new CoMySQL(); $server = array( "host" => "127.0.0.1", "user" => "root", "password" => "root", "database" => "test", ); $db->connect($server); $result = $db->query("SELECT * FROM userinfo WHERE id = 3"); var_dump($result); });Redis Client
go(function () { $redis = new CoRedis; $res = $redis->connect("127.0.0.1", 6379); $ret = $redis->set("key", "value"); var_dump($redis->get("key")); });Http Client
go(function () { $http = new CoHttpClient("www.google.com", 443, true); $http->setHeaders(function () { }); $ret = $http->get("/"); var_dump($http->body); });Http2 Client
go(function () { $http = new CoHttp2Client("www.google.com", 443, true); $req = new coHttp2Request; $req->path = "/index.html"; $req->headers = [ "host" => "www.google.com", "user-agent" => "Chrome/49.0.2587.3", "accept" => "text/html,application/xhtml+xml,application/xml", "accept-encoding" => "gzip", ]; $req->cookies = ["name" => "rango", "email" => "rango@swoole.com"]; $ret = $http->send($req); var_dump($http->recv()); });其他 API
co::sleep(100); co::fread($fp); co::fwrite($fp, "hello world"); co::gethostbyname("www.google.com");服務器端
$server = new CoHttpServer("127.0.0.1", 9501); $server->on("Request", function($request, $response) { $http = new CoHttpClient("www.google.com", 443, true); $http->setHeaders(function () { "X-Power-By" => "Swoole/2.1.0", }); $ret = $http->get("/"); if ($ret) { $response->end($http->body); } else{ $response->end("recv failed error : {$http->errCode}"); } }); $server->start();
Swoole提供了很多CoServer、CoWebSocketServer、CoHttpServer、CoRedisServer共4個支持協程的Server類,可以在這些服務器程序中使用協程API。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28238.html
摘要:為語言提供了強大的協程編程模式。提供的協程語法借鑒自,在此向開發組致敬協程可以與很好地互補。并發執行使用創建協程,可以讓和兩個函數變成并發執行。協程需要拿到請求的結果。 Swoole4為PHP語言提供了強大的CSP協程編程模式。底層提供了3個關鍵詞,可以方便地實現各類功能。 Swoole4提供的PHP協程語法借鑒自Golang,在此向GO開發組致敬 PHP+Swoole協程可以與...
摘要:開發負責人創建分支,編寫單元測試腳本,編寫代碼,實現提案中的所有內容,最終發起交叉評審,檢查代碼,提出改進意見,反饋給開發負責人,繼續完善細節。 Swoole開源項目從2012年開始發布第一個版本,到現在已經有近7年的歷史。在這七年的時間里: 提交了8821次代碼變更 發布了287個版本 收到并解決1161次issue反饋 合并了603次pull request 共有100位開發者...
摘要:在禁止場景中使用協程會出現各種莫名其妙的問題發生。限制了協程的應用范圍。新版本基于匯編代碼實現了全新的協程內核。實現了對所有語法的支持。穩定性和健壯性均已達到工業級的水準。完全可用于大型項目的生產環境中。 Swoole雖然在2016年就支持了協程特性,但由于底層是基于setjmp/longjmp實現的stackless方案。因此在某些場景下,如call_user_func、array_...
摘要:年月日,在上海舉行的第六屆中國開發者大會上,騰訊開源項目首次全面發布版本,閱文集團高級開發工程師梁晨對如何通過構建高性能框架做了經驗分享。分享內容作為騰訊開源的框架,在發布之后即受到開源領域的關注。閱文集團本身也有一塊新的業務在使用。 2018年5月19日,在上海舉行的第六屆中國PHP開發者大會(PHPCon)上,騰訊開源項目TARS首次全面發布PHP版本,閱文集團高級開發工程師梁晨對...
閱讀 3280·2023-04-26 02:09
閱讀 2574·2021-11-24 09:39
閱讀 3268·2021-11-16 11:52
閱讀 3614·2021-10-26 09:50
閱讀 2771·2021-10-08 10:05
閱讀 2456·2021-09-22 15:25
閱讀 3299·2019-08-30 13:14
閱讀 908·2019-08-29 17:06