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 bottom 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)
Compared with the implementation of yield/generator and async/await in Node.js (ES6), Python and other languages, Swoole coroutine does not need to be modified. The code adds 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, and 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 Which version of swoole supports php5. For more information, please follow other related articles on the PHP Chinese website!