一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Swoole 2.0 正式版發(fā)布,協程特性支持 PHP 7

 chenTUPI 2017-02-19

(點擊上方公眾號,可快速關注)

來源:開源中國

網址:www.oschina.net/news/80627/swoole-2-0


Swoole 2.0正式版發(fā)布了。2.0版本最大的更新是增加了對協程(Coroutine)的支持。正式版已同時支持PHP5和PHP7?;赟woole2.0協程PHP開發(fā)者可以已同步的方式編寫代碼,底層自動進行協程調度,轉變?yōu)楫惒絀O。解決了傳統(tǒng)異步編程嵌套回調的問題。


與Node.js(ES6+)、Python等語言使用yield/generator、async/await的實現方式相比,Swoole協程無需修改代碼添加額外的關鍵詞。


與Go語言的goroutine相比,Swoole協程是內置式的,應用層代碼無需添加go關鍵詞啟動協程,只需要使用封裝好的協程客戶端即可,使用更簡單。另外Swoole協程的IO組件在底層內置了超時機制,不需要使用復雜的select/chan/timer實現客戶端超時。


目前Swoole底層內置的協程客戶端組件包括:udpclient、tcpclient、httpclient、redisclient、mysqlclient,基本涵蓋了開發(fā)者常用的幾種通信協議。協程組件只能在服務器的onConnect、onRequest、onReceive、onMessage 回調函數中使用。


使用示例:


$server = new SwooleHttpServer('127.0.0.1', 9501);

 

/*

    觸發(fā)on request事件時,SWOOLE會開辟一個協程棧,對協程棧進行初始化

 */

$server->on('Request', function ($request, $response) {

    $tcp_cli = new SwooleCoroutineClient(SWOOLE_SOCK_TCP);

    /**

        client在調用connect函數后,SWOOLE會將PHP上下文信息保存到當前棧內

        然后將協程掛起,待確認連接成功后,觸發(fā)epoll事件,然后協程切換

        恢復PHP上下文信息,返回結果,繼續(xù)執(zhí)行PHP代碼

     */

    if ($tcp_cli->connect('127.0.0.1', 9906) === false) {

        $response->end("connect server failed.");

        return;

    }

    $tcp_cli->send('test for the coro');

    /*

        client在調用recv函數后,SWOOLE會將PHP上下文信息保存到當前棧內

        然后將協程掛起待后端svr回包,觸發(fā)epoll事件,然后協程切換

        恢復PHP上下文信息,返回結果,繼續(xù)執(zhí)行PHP代碼

        如果后端在設定的超時時間內,未能回包,返回false

        client的errCode定為110

     */

    $ret = $tcp_cli->recv(100);

    $tcp_cli->close();

    if ($ret) {

        $response->end(" swoole response is ok");

    } else {

        $response->end(" recv failed error : {$tcp_cli->errCode}");

    }

});

 

$server->start();


UDP客戶端


$udp_cli = new SwooleCoroutineClient(SWOOLE_SOCK_UDP);

 

$ret = $udp_cli->connect('127.0.0.1', 9906);

$udp_cli->send('test for the coro');

 

$ret = $udp_cli->recv(100);

$udp_cli->close();

 

if ($ret)

{

    $response->end("swoole response is ok");

}

else

{

    $response->end("recv failed error : {$client->errCode}");

}


MySQL客戶端


$swoole_mysql = new SwooleCoroutineMySQL();

$swoole_mysql->connect([

    'host' => '127.0.0.1',

    'user' => 'user',

    'password' => 'pass',

    'database' => 'test'

]);

$res = $swoole_mysql->query('select sleep(1)');


Redis客戶端


$redis = new SwooleCoroutineRedis();

$redis->connect('127.0.0.1', 6379);

$val = $redis->get('key');


HTTP客戶端


$cli = new SwooleCoroutineHttpClient('127.0.0.1', 80);

$cli->setHeaders([

    'Host' => "localhost",

    "User-Agent" => 'Chrome/49.0.2587.3',

    'Accept' => 'text/html,application/xhtml+xml,application/xml',

    'Accept-Encoding' => 'gzip',

]);

$cli->set([ 'timeout' => 1]);

$cli->get('/index.php');

echo $cli->body;  

$cli->close();


下載地址:

  • Github:https://github.com/swoole/swoole-src/releases/tag/v2.0.5

  • 開源中國:http://git.oschina.net/matyhtf/swoole/tree/v2.0.5

  • PECL:https://pecl./package/swoole/2.0.5


看完本文有收獲?請分享給更多人

關注「PHP開發(fā)者」,看技術干貨

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品白丝久久av| 空之色水之色在线播放| 国产91人妻精品一区二区三区| 久草视频在线视频在线观看| 久久精品蜜桃一区二区av| 精品人妻久久一品二品三品| 99久久精品免费看国产高清| 极品少妇一区二区三区精品视频| 日本不卡视频在线观看| 最新日韩精品一推荐日韩精品| 激情五月天深爱丁香婷婷| 国产欧美亚洲精品自拍| 国产色第一区不卡高清| 黄色国产一区二区三区| 亚洲av熟女国产一区二区三区站| 日韩精品一区二区一牛| 国产一区二区精品丝袜| 国产中文字幕一区二区| 亚洲天堂精品1024| 欧美亚洲另类久久久精品| 午夜色午夜视频之日本| 欧美日本精品视频在线观看| 男人大臿蕉香蕉大视频| av中文字幕一区二区三区在线| 嫩呦国产一区二区三区av| 欧美精品久久99九九| 欧美大黄片在线免费观看| 老司机精品一区二区三区| 中文字幕区自拍偷拍区| 欧美一区二区口爆吞精| 免费一区二区三区少妇| 欧美午夜一级艳片免费看| 中文字字幕在线中文乱码二区| 国产熟女一区二区精品视频| 国产午夜精品美女露脸视频| 国产成人亚洲综合色就色| 亚洲天堂精品1024| 国产在线视频好看不卡| 日本人妻的诱惑在线观看| 日韩人妻少妇一区二区| 亚洲精品一区三区三区|