首頁 >php框架 >Swoole >swoole2.0可以做什麼

swoole2.0可以做什麼

(*-*)浩
(*-*)浩原創
2019-12-12 13:19:241950瀏覽

swoole2.0可以做什麼

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 回呼函數中使用。

使用範例

$server = new Swoole\Http\Server('127.0.0.1', 9501);

/*
    触发on request事件时,SWOOLE会开辟一个协程栈,对协程栈进行初始化
 */
$server->on('Request', function ($request, $response) {
    $tcp_cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
    /**
        client在调用connect函数后,SWOOLE会将PHP上下文信息保存到当前栈内
        然后将协程挂起,待确认连接成功后,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行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回包,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行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();

以上是swoole2.0可以做什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

相關文章

看更多