资讯专栏INFORMATION COLUMN

Swoole 2.1 正式版发布,协程+通道带来全新的 PHP 编程模式

seanHai / 1092人阅读

摘要:的异步并行高性能网络通信引擎已发布版本。新版本提供了全新的短名,完整支持了协程通道特性,为语言带来了全新的编程模式。的借鉴至语言,在此向语言开发组致敬。其他服务器端提供了很多共个支持协程的类,可以在这些服务器程序中使用协程。

PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 2.1.0 版本。新版本提供了全新的短名 API,完整支持了协程(Coroutine)+通道(Channel)特性,为 PHP 语言带来了全新的编程模式。Swoole 2.1API借鉴至Go语言,在此向Go语言开发组致敬。

Coroutine

</>复制代码

  1. go(function () {
  2. co::sleep(0.5);
  3. echo "hello";
  4. });
  5. go("test");
  6. go([$object, "method"]);
Channel

</>复制代码

  1. $chan = new chan(128);
  2. $chan->push(1234);
  3. $chan->push(1234.56);
  4. $chan->push("hello world");
  5. $chan->push(["hello world"]);
  6. $chan->push(new stdclass);
  7. $chan->push(fopen("test.txt", "r+"));
  8. while($chan->pop());

Go语言的chan不同,由于PHP是动态语言,所以可以向通道内投递任意类型的变量。

Channel Select

</>复制代码

  1. $c1 = new chan(3);
  2. $c2 = new chan(2);
  3. $c3 = new chan(2);
  4. $c4 = new chan(2);
  5. $c3->push(3);
  6. $c3->push(3.1415);
  7. $c4->push(3);
  8. $c4->push(3.1415);
  9. go(function () use ($c1, $c2, $c3, $c4) {
  10. echo "select
  11. ";
  12. for ($i = 0; $i < 1; $i++)
  13. {
  14. $read_list = [$c1, $c2];
  15. $write_list = [$c3, $c4];
  16. // $write_list = null;
  17. $result = chan::select($read_list, $write_list, 5);
  18. var_dump($result, $read_list, $write_list);
  19. foreach($read_list as $ch)
  20. {
  21. var_dump($ch->pop());
  22. }
  23. foreach($write_list as $ch)
  24. {
  25. var_dump($ch->push(666));
  26. }
  27. echo "exit
  28. ";
  29. }
  30. });
  31. go(function () use ($c3, $c4) {
  32. echo "producer
  33. ";
  34. co::sleep(1);
  35. $data = $c3->pop();
  36. echo "pop[1]
  37. ";
  38. var_dump($data);
  39. });
  40. go(function () {
  41. co::sleep(10);
  42. });
  43. go(function () use ($c1, $c2) {
  44. co::sleep(1);
  45. $c1->push("resume");
  46. $c2->push("hello");
  47. });
MySQL Client

</>复制代码

  1. go(function () {
  2. $db = new CoMySQL();
  3. $server = array(
  4. "host" => "127.0.0.1",
  5. "user" => "root",
  6. "password" => "root",
  7. "database" => "test",
  8. );
  9. $db->connect($server);
  10. $result = $db->query("SELECT * FROM userinfo WHERE id = 3");
  11. var_dump($result);
  12. });
Redis Client

</>复制代码

  1. go(function () {
  2. $redis = new CoRedis;
  3. $res = $redis->connect("127.0.0.1", 6379);
  4. $ret = $redis->set("key", "value");
  5. var_dump($redis->get("key"));
  6. });
Http Client

</>复制代码

  1. go(function () {
  2. $http = new CoHttpClient("www.google.com", 443, true);
  3. $http->setHeaders(function () {
  4. });
  5. $ret = $http->get("/");
  6. var_dump($http->body);
  7. });
Http2 Client

</>复制代码

  1. go(function () {
  2. $http = new CoHttp2Client("www.google.com", 443, true);
  3. $req = new coHttp2Request;
  4. $req->path = "/index.html";
  5. $req->headers = [
  6. "host" => "www.google.com",
  7. "user-agent" => "Chrome/49.0.2587.3",
  8. "accept" => "text/html,application/xhtml+xml,application/xml",
  9. "accept-encoding" => "gzip",
  10. ];
  11. $req->cookies = ["name" => "rango", "email" => "rango@swoole.com"];
  12. $ret = $http->send($req);
  13. var_dump($http->recv());
  14. });
其他 API

</>复制代码

  1. co::sleep(100);
  2. co::fread($fp);
  3. co::fwrite($fp, "hello world");
  4. co::gethostbyname("www.google.com");
服务器端

</>复制代码

  1. $server = new CoHttpServer("127.0.0.1", 9501);
  2. $server->on("Request", function($request, $response) {
  3. $http = new CoHttpClient("www.google.com", 443, true);
  4. $http->setHeaders(function () {
  5. "X-Power-By" => "Swoole/2.1.0",
  6. });
  7. $ret = $http->get("/");
  8. if ($ret) {
  9. $response->end($http->body);
  10. }
  11. else{
  12. $response->end("recv failed error : {$http->errCode}");
  13. }
  14. });
  15. $server->start();

Swoole提供了很多CoServerCoWebSocketServerCoHttpServerCoRedisServer4个支持协程的Server类,可以在这些服务器程序中使用协程API

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28238.html

相关文章

  • PHP 协程:Go + Chan + Defer

    摘要:为语言提供了强大的协程编程模式。提供的协程语法借鉴自,在此向开发组致敬协程可以与很好地互补。并发执行使用创建协程,可以让和两个函数变成并发执行。协程需要拿到请求的结果。 Swoole4为PHP语言提供了强大的CSP协程编程模式。底层提供了3个关键词,可以方便地实现各类功能。 Swoole4提供的PHP协程语法借鉴自Golang,在此向GO开发组致敬 PHP+Swoole协程可以与...

    nidaye 评论0 收藏0
  • PHP相关

    摘要:的机器学习库的机器学习库,包括算法交叉验证神经网络等内容。在即将到来的大会上,她将和大家分享在机器学习领域的全新可能。入门总结入门相关,如安装配置基本使用等。 基于 Swoole 开发 PHP 扩展 Swoole-1.9.7 增加了一个新特性,可以基于 Swoole 使用 C++ 语言开发扩展模块,在扩展模块中可以注册 PHP 内置函数和类。现在可以基于 Swoole 来编写 PHP ...

    lewinlee 评论0 收藏0
  • Swoole 2019 :化繁为简、破茧成蝶

    摘要:开发负责人创建分支,编写单元测试脚本,编写代码,实现提案中的所有内容,最终发起交叉评审,检查代码,提出改进意见,反馈给开发负责人,继续完善细节。 Swoole开源项目从2012年开始发布第一个版本,到现在已经有近7年的历史。在这七年的时间里: 提交了8821次代码变更 发布了287个版本 收到并解决1161次issue反馈 合并了603次pull request 共有100位开发者...

    adam1q84 评论0 收藏0
  • Swoole 4.0 式版,面向生产环境 PHP 协程引擎

    摘要:在禁止场景中使用协程会出现各种莫名其妙的问题发生。限制了协程的应用范围。新版本基于汇编代码实现了全新的协程内核。实现了对所有语法的支持。稳定性和健壮性均已达到工业级的水准。完全可用于大型项目的生产环境中。 Swoole虽然在2016年就支持了协程特性,但由于底层是基于setjmp/longjmp实现的stackless方案。因此在某些场景下,如call_user_func、array_...

    Zack 评论0 收藏0
  • 干货| PHPCon上TARS-PHP全面解读及PPT下载

    摘要:年月日,在上海举行的第六届中国开发者大会上,腾讯开源项目首次全面发布版本,阅文集团高级开发工程师梁晨对如何通过构建高性能框架做了经验分享。分享内容作为腾讯开源的框架,在发布之后即受到开源领域的关注。阅文集团本身也有一块新的业务在使用。 2018年5月19日,在上海举行的第六届中国PHP开发者大会(PHPCon)上,腾讯开源项目TARS首次全面发布PHP版本,阅文集团高级开发工程师梁晨对...

    JasonZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<