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

综合编程 开源中国 (源链)

PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 2.0.10 版本。新版本提供了全新的短名 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 "selectn"; for ($i = 0; $i pop());
        } foreach($write_list as $ch)
        {
            var_dump($ch->push(666));
        } echo "exitn";
    }
});

go(function () use ($c3, $c4) { echo "producern";
    co::sleep(1);
    $data = $c3->pop(); echo "pop[1]n";
    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。

您可能感兴趣的

Swoole 1.9.15 发布,增加静态编译支持 PHP的异步、并行、高性能网络通信引擎 Swoole 已发布 1.9.15 版本。此版本增加了对静态编译的支持,可以将 Swoole 与 PHP 源码一起编译,内置到 PHP 中。另外此版本增加了 170 个单元测试用例,覆盖 90% 以上的 API。 主要更新: 增加MySQL...
Async Expressive? Try Swoole! 2018-03-21 | By: Matthew Weier O'Phinney When we were finalizing features forExpressive 3, we had a number of users testing using asynchrono...
Zan & Swoole2.0 Swoole2.0 alpha版发布 ,大家可能会有个疑惑, Zan的协程框架是不是要关门大吉了呢? 答案当然是否定的。 Zan和Swoole2.0走的方向是不一样的;Swoole2.0的方向是希望和Golang一较高下; Zan的定...
Swoole+React 实现的聊天室 前后端分离的项目,使用Swoole+React实现的聊天室,整个项目的框架结构可以进行参考,前端react+react-redux+react-router+react-ant等等,后台使用easySwoole,自行实现中间件(数据封装,token验证,签名验证),认真看代码可以学到很多哦,:smi...
基于 Swoole 的轻量级高性能框架 swoolefy 1.0.6 发布... swoolefy是基于swoole实现的轻量级高性能框架,框架支持http,websocket,udp服务器,以及基于tcp实现可扩展的rpc服务,同时支持composer包方式安装部署项目。基于实用,swoolefy抽象Event事件处理类,实现与底层的回调的解耦,支持同步|异步调用,内置v...
开源中国责编内容来自:开源中国 (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » Swoole 2.1 正式版:协程+通道带来全新的PHP编程模式



专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录