摘要:的異步并行高性能網(wǎng)絡(luò)通信引擎已發(fā)布版本。新版本提供了全新的短名,完整支持了協(xié)程通道特性,為語(yǔ)言帶來(lái)了全新的編程模式。的借鑒至語(yǔ)言,在此向語(yǔ)言開(kāi)發(fā)組致敬。其他服務(wù)器端提供了很多共個(gè)支持協(xié)程的類(lèi),可以在這些服務(wù)器程序中使用協(xié)程。
PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎 Swoole 已發(fā)布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了協(xié)程(Coroutine)+通道(Channel)特性,為 PHP 語(yǔ)言帶來(lái)了全新的編程模式。Swoole 2.1的API借鑒至Go語(yǔ)言,在此向Go語(yǔ)言開(kāi)發(fā)組致敬。
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語(yǔ)言的chan不同,由于PHP是動(dòng)態(tài)語(yǔ)言,所以可以向通道內(nèi)投遞任意類(lèi)型的變量。
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" => "[email protected]"]; $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");服務(wù)器端
$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個(gè)支持協(xié)程的Server類(lèi),可以在這些服務(wù)器程序中使用協(xié)程API。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28238.html
摘要:為語(yǔ)言提供了強(qiáng)大的協(xié)程編程模式。提供的協(xié)程語(yǔ)法借鑒自,在此向開(kāi)發(fā)組致敬協(xié)程可以與很好地互補(bǔ)。并發(fā)執(zhí)行使用創(chuàng)建協(xié)程,可以讓和兩個(gè)函數(shù)變成并發(fā)執(zhí)行。協(xié)程需要拿到請(qǐng)求的結(jié)果。 Swoole4為PHP語(yǔ)言提供了強(qiáng)大的CSP協(xié)程編程模式。底層提供了3個(gè)關(guān)鍵詞,可以方便地實(shí)現(xiàn)各類(lèi)功能。 Swoole4提供的PHP協(xié)程語(yǔ)法借鑒自Golang,在此向GO開(kāi)發(fā)組致敬 PHP+Swoole協(xié)程可以與...
摘要:的機(jī)器學(xué)習(xí)庫(kù)的機(jī)器學(xué)習(xí)庫(kù),包括算法交叉驗(yàn)證神經(jīng)網(wǎng)絡(luò)等內(nèi)容。在即將到來(lái)的大會(huì)上,她將和大家分享在機(jī)器學(xué)習(xí)領(lǐng)域的全新可能。入門(mén)總結(jié)入門(mén)相關(guān),如安裝配置基本使用等。 基于 Swoole 開(kāi)發(fā) PHP 擴(kuò)展 Swoole-1.9.7 增加了一個(gè)新特性,可以基于 Swoole 使用 C++ 語(yǔ)言開(kāi)發(fā)擴(kuò)展模塊,在擴(kuò)展模塊中可以注冊(cè) PHP 內(nèi)置函數(shù)和類(lèi)?,F(xiàn)在可以基于 Swoole 來(lái)編寫(xiě) PHP ...
摘要:開(kāi)發(fā)負(fù)責(zé)人創(chuàng)建分支,編寫(xiě)單元測(cè)試腳本,編寫(xiě)代碼,實(shí)現(xiàn)提案中的所有內(nèi)容,最終發(fā)起交叉評(píng)審,檢查代碼,提出改進(jìn)意見(jiàn),反饋給開(kāi)發(fā)負(fù)責(zé)人,繼續(xù)完善細(xì)節(jié)。 Swoole開(kāi)源項(xiàng)目從2012年開(kāi)始發(fā)布第一個(gè)版本,到現(xiàn)在已經(jīng)有近7年的歷史。在這七年的時(shí)間里: 提交了8821次代碼變更 發(fā)布了287個(gè)版本 收到并解決1161次issue反饋 合并了603次pull request 共有100位開(kāi)發(fā)者...
摘要:在禁止場(chǎng)景中使用協(xié)程會(huì)出現(xiàn)各種莫名其妙的問(wèn)題發(fā)生。限制了協(xié)程的應(yīng)用范圍。新版本基于匯編代碼實(shí)現(xiàn)了全新的協(xié)程內(nèi)核。實(shí)現(xiàn)了對(duì)所有語(yǔ)法的支持。穩(wěn)定性和健壯性均已達(dá)到工業(yè)級(jí)的水準(zhǔn)。完全可用于大型項(xiàng)目的生產(chǎn)環(huán)境中。 Swoole雖然在2016年就支持了協(xié)程特性,但由于底層是基于setjmp/longjmp實(shí)現(xiàn)的stackless方案。因此在某些場(chǎng)景下,如call_user_func、array_...
摘要:年月日,在上海舉行的第六屆中國(guó)開(kāi)發(fā)者大會(huì)上,騰訊開(kāi)源項(xiàng)目首次全面發(fā)布版本,閱文集團(tuán)高級(jí)開(kāi)發(fā)工程師梁晨對(duì)如何通過(guò)構(gòu)建高性能框架做了經(jīng)驗(yàn)分享。分享內(nèi)容作為騰訊開(kāi)源的框架,在發(fā)布之后即受到開(kāi)源領(lǐng)域的關(guān)注。閱文集團(tuán)本身也有一塊新的業(yè)務(wù)在使用。 2018年5月19日,在上海舉行的第六屆中國(guó)PHP開(kāi)發(fā)者大會(huì)(PHPCon)上,騰訊開(kāi)源項(xiàng)目TARS首次全面發(fā)布PHP版本,閱文集團(tuán)高級(jí)開(kāi)發(fā)工程師梁晨對(duì)...
閱讀 3298·2023-04-26 02:09
閱讀 2601·2021-11-24 09:39
閱讀 3291·2021-11-16 11:52
閱讀 3626·2021-10-26 09:50
閱讀 2782·2021-10-08 10:05
閱讀 2465·2021-09-22 15:25
閱讀 3311·2019-08-30 13:14
閱讀 923·2019-08-29 17:06