摘要:的异步并行高性能网络通信引擎已发布版本。新版本提供了全新的短名,完整支持了协程通道特性,为语言带来了全新的编程模式。的借鉴至语言,在此向语言开发组致敬。其他服务器端提供了很多共个支持协程的类,可以在这些服务器程序中使用协程。
PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了协程(Coroutine)+通道(Channel)特性,为 PHP 语言带来了全新的编程模式。Swoole 2.1的API借鉴至Go语言,在此向Go语言开发组致敬。
Coroutine</>复制代码
go(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。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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版本,阅文集团高级开发工程师梁晨对...
阅读 3490·2023-04-26 02:09
阅读 2832·2021-11-24 09:39
阅读 3451·2021-11-16 11:52
阅读 3830·2021-10-26 09:50
阅读 2911·2021-10-08 10:05
阅读 2591·2021-09-22 15:25
阅读 3434·2019-08-30 13:14
阅读 1065·2019-08-29 17:06