>  기사  >  PHP 프레임워크  >  swoole2.0이 할 수 있는 일

swoole2.0이 할 수 있는 일

(*-*)浩
(*-*)浩원래의
2019-12-12 13:19:241932검색

swoole2.0이 할 수 있는 일

Swoole 2.0 정식 버전이 출시되었습니다. 버전 2.0의 가장 큰 업데이트는 코루틴 지원 추가입니다. 공식 버전은 PHP5와 PHP7을 모두 지원합니다.

Swoole2.0 코루틴을 기반으로 PHP 개발자는 동기 방식으로 코드를 작성할 수 있으며 기본 레이어는 자동으로 코루틴을 예약하고 이를 비동기 IO로 변환합니다. 기존 비동기 프로그래밍에서 중첩된 콜백 문제를 해결합니다. #推荐#(추천 학습:SWOOLE 동영상 튜토리얼)🎜🎜##및 Node.js(ES6+), Python 및 기타 언어에서는 Yield/generals, async/await를 사용합니다. 비교해 보면 Swoole 코루틴은 추가 키워드를 추가하기 위해 코드를 수정할 필요가 없습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.