Heim > Artikel > PHP-Framework > Was swoole2.0 kann
Die offizielle Version von Swoole 2.0 wurde veröffentlicht. Das größte Update in Version 2.0 ist die zusätzliche Unterstützung für Coroutinen. Die offizielle Version unterstützt sowohl PHP5 als auch PHP7.
Basierend auf der Swoole2.0-Coroutine können PHP-Entwickler Code synchron schreiben, und die unterste Ebene plant die Coroutine automatisch und wandelt sie in asynchrone E/A um. Lösen Sie das Problem verschachtelter Rückrufe in der herkömmlichen asynchronen Programmierung. Es ist nicht erforderlich, den Code zu ändern, um zusätzliche Schlüsselwörter hinzuzufügen.
Im Vergleich zu Goroutine ist die Swoole-Coroutine integriert. Zum Starten der Coroutine ist es nicht erforderlich, das Schlüsselwort „go“ hinzuzufügen ist einfacher zu verwenden. Darüber hinaus verfügt die E/A-Komponente der Swoole-Coroutine über einen integrierten Timeout-Mechanismus auf der untersten Ebene, sodass kein komplexer Select/Chan/Timer zur Implementierung des Client-Timeouts verwendet werden muss. Zu den integrierten Coroutine-Client-Komponenten unten in Swoole gehören derzeit: udpclient, tcpclient, httpclient, redisclient und mysqlclient, die im Wesentlichen mehrere von Entwicklern häufig verwendete Kommunikationsprotokolle abdecken. Coroutine-Komponenten können nur in den Rückruffunktionen onConnect, onRequest, onReceive und onMessage des Servers verwendet werden.Verwendungsbeispiel
$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();
Das obige ist der detaillierte Inhalt vonWas swoole2.0 kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!