swoole如何提高php性能

互联网 19-12-7

Swoole中的网络请求处理是基于事件的,并且充分利用了底层的epoll / kqueue实现,使得为数百万个请求提供服务变得非常容易。

Swoole4使用全新的协程内核引擎,现在它拥有一个全职的开发团队,因此我们正在进入PHP历史上前所未有的时期,为性能的高速提升提供了独一无二的可能性。 (推荐学习: swoole视频教程)

协程

Swoole4或更高版本拥有高可用性的内置协程,您可以使用完全同步的代码来实现异步性能,PHP代码没有任何额外的关键字,底层会自动进行协程调度。

开发者可以将协程理解为超轻量级的线程, 你可以非常容易地在一个进程中创建成千上万个协程。

并发1万个请求从MySQL读取海量数据仅需要0.2秒

$s = microtime(true); Co\run(function() {     for ($c = 100; $c--;) {         go(function () {             $mysql = new Swoole\Coroutine\MySQL;             $mysql->connect([                 'host' => '127.0.0.1',                 'user' => 'root',                 'password' => 'root',                 'database' => 'test'             ]);             $statement = $mysql->prepare('SELECT * FROM `user`');             for ($n = 100; $n--;) {                 $result = $statement->execute();                 assert(count($result) > 0);             }         });     } }); echo 'use ' . (microtime(true) - $s) . ' s';

混合服务器

你可以在一个事件循环上创建多个服务:TCP,HTTP,Websocket和HTTP2,并且能轻松承载上万请求。

function tcp_pack(string $data): string {     return pack('N', strlen($data)) . $data; } function tcp_unpack(string $data): string {     return substr($data, 4, unpack('N', substr($data, 0, 4))[1]); } $tcp_options = [     'open_length_check' => true,     'package_length_type' => 'N',     'package_length_offset' => 0,     'package_body_offset' => 4 ]; --------------------------------------------------------------------------------------------------------------- $server = new Swoole\WebSocket\Server('127.0.0.1', 9501, SWOOLE_BASE); $server->set(['open_http2_protocol' => true]); // http && http2 $server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {     $response->end('Hello ' . $request->rawcontent()); }); // websocket $server->on('message', function (Swoole\WebSocket\Server $server, Swoole\WebSocket\Frame $frame) {     $server->push($frame->fd, 'Hello ' . $frame->data); }); // tcp $tcp_server = $server->listen('127.0.0.1', 9502, SWOOLE_TCP); $tcp_server->set($tcp_options); $tcp_server->on('receive', function (Swoole\Server $server, int $fd, int $reactor_id, string $data) {     $server->send($fd, tcp_pack('Hello ' . tcp_unpack($data))); }); $server->start();

以上就是swoole如何提高php性能的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: Swoole
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:swoole如何重启

相关资讯