首頁 >php框架 >Swoole >swoole協程怎麼開啟

swoole協程怎麼開啟

(*-*)浩
(*-*)浩原創
2019-12-09 11:01:313414瀏覽

swoole協程怎麼開啟

Swoole 2.0正式版發布了。 2.0版本最大的更新是增加了對協程(Coroutine)的支援。正式版已同時支援PHP5和PHP7。

基於Swoole2.0協程PHP開發者可以已同步的方式編寫程式碼,底層自動進行協程調度,轉變為非同步IO。

解決了傳統非同步程式嵌套回呼的問題。 (推薦學習: swoole影片教學

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

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

目前Swoole底層內建的協程客戶端元件包括:udpclient、tcpclient、httpclient、redisclient、mysqlclient,基本上涵蓋了開發者常用的幾種通訊協定。 協程元件只能在伺服器的onConnect、onRequest、onReceive、onMessage 回呼函數中使用。

使用swole 協程

如何使用協程:

使用go()( \Swoole\Coroutine::create() 的簡寫) 建立一個協程

#在go() 的回呼函數中, 加入協程需要執行的程式碼, 注意是非阻塞程式碼

use Swoole\Coroutine as Co; // 常用的缩写方式

go(function () { // 创建协程, 回调函数中写需要在协程中执行的代码
    echo "daydaygo";
    Co::sleep(1); // 不能是阻塞代码
});

協程

上文提到的, 使用go() 建立一個協程

swoole server 中, 底層自動在onRequet, onReceive, onConnect 等事件回呼之前自動建立一個協程

開啟enable_coroutine 參數後的影響範圍: 主要還包括Timer 定時器

使用task_enable_coroutine 開啟的協程版Task 程序,會在onTask 回呼之前自動建立一個協程

進程和進程池支援開啟協程, 開啟後建立的子程序會自動建立協程

// tcp/udp server, 可以在此基础可封装 rpc
$s = new \Swoole\Server();
// http server, 替代传统的 fpm
$s = new \Swoole\Http\Server();
// 开启 http2 支持: https://wiki.swoole.com/wiki/page/326.html
$s = new \Swoole\Http\Server();
$s->set([
    'open_http2_protocol' => true,
]);
// 进而可以实现基于 http2 的服务, 比如 grpc
// websocket server
$s = new \Swoole\WebSocket\Server();

以上是swoole協程怎麼開啟的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn