旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Swoole > 正文

swoole怎样进步php机能【swoole】,swoole

作者:搜搜PHP网发布时间:2019-12-08分类:Swoole浏览:67


导读:Swoole中的收集要求处置惩罚是基于事宜的,而且充分利用了底层的epoll/kqueue完成,使得为数百万个要求供应效劳变得异常轻易。Swoole4运用全新的协程...

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机能的细致内容,更多请关注ki4网别的相干文章!

标签:swoole