ホームページ  >  記事  >  PHPフレームワーク  >  swoole2.0でできること

swoole2.0でできること

(*-*)浩
(*-*)浩オリジナル
2019-12-12 13:19:241908ブラウズ

swoole2.0でできること

Swoole 2.0 の正式版がリリースされました。バージョン 2.0 の最大のアップデートは、コルーチンのサポートが追加されたことです。正式版はPHP5とPHP7の両方をサポートしています。

Swoole2.0 コルーチンに基づいて、PHP 開発者は同期方式でコードを記述することができ、基礎となる層がコルーチンを自動的にスケジュールし、非同期 IO に変換します。従来の非同期プログラミングにおけるネストされたコールバックの問題を解決します。 (推奨学習: SWOOLE ビデオ チュートリアル )

および Node.js (ES6)、Python およびその他の言語は、yield/generator、async/await、比較、Swoole Association を使用します追加のキーワードを追加するためにコードを変更する必要はありません。

Go 言語のゴルーチンと比較すると、Swoole コルーチンは組み込みです。アプリケーション層のコードは、コルーチンを開始するために go キーワードを追加する必要はありません。カプセル化されたコルーチン クライアントを使用するだけでよく、よりシンプルです。使用します。さらに、Swoole コルーチンの IO コンポーネントには最下層にタイムアウト メカニズムが組み込まれているため、クライアント タイムアウトを実装するために複雑な選択/チャン/タイマーを使用する必要はありません。

現在、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。