Home  >  Article  >  PHP Framework  >  What swoole2.0 can do

What swoole2.0 can do

(*-*)浩
(*-*)浩Original
2019-12-12 13:19:241908browse

What swoole2.0 can do

The official version of Swoole 2.0 is released. The biggest update in version 2.0 is the addition of support for coroutines. The official version supports both PHP5 and PHP7.

Based on the Swoole2.0 coroutine, PHP developers can write code in a synchronous manner, and the underlying layer automatically schedules the coroutine and transforms it into asynchronous IO. Solve the problem of nested callbacks in traditional asynchronous programming. (Recommended Learning: SWOOLE Video Tutorial )

and Node.js (ES6), Python and other languages ​​use yield/generator, async/await, compared, Swoole Association There is no need to modify the code to add additional keywords.

Compared with goroutine in Go language, Swoole coroutine is built-in. The application layer code does not need to add the go keyword to start the coroutine. It only needs to use the encapsulated coroutine client, which is simpler to use. . In addition, the IO component of the Swoole coroutine has a built-in timeout mechanism at the bottom layer, so there is no need to use complex select/chan/timer to implement client timeout.

Currently, the built-in coroutine client components at the bottom of Swoole include: udpclient, tcpclient, httpclient, redisclient, and mysqlclient, which basically cover several communication protocols commonly used by developers. Coroutine components can only be used in the server's onConnect, onRequest, onReceive, and onMessage callback functions.

Usage example

$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();

The above is the detailed content of What swoole2.0 can do. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn