Swoole 2.0 정식 버전이 출시되었습니다. 버전 2.0의 가장 큰 업데이트는 코루틴 지원 추가입니다. 공식 버전은 PHP5와 PHP7을 모두 지원합니다. Swoole2.0 코루틴을 기반으로 PHP 개발자는 동기 방식으로 코드를 작성할 수 있으며 기본 레이어는 자동으로 코루틴을 예약하고 이를 비동기 IO로 변환합니다.
기존 비동기 프로그래밍의 중첩된 콜백 문제를 해결하세요. (권장 학습: swoole 동영상 튜토리얼 )
Node.js(ES6+), Python 및 기타 언어의 Yield/generator, 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();
위 내용은 php5를 지원하는 swoole 버전의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!