不知道會不會阻塞當前進程
還請 walkor 大佬解答一下
一鍵協(xié)程化以后,swoole會hook使用curl方式發(fā)送的http(s)請求。
我記得老大在文檔里面說過其實就是老大在workerman中封裝了那些協(xié)程化驅動。所以你就是看一下異步http客戶端的實現是使用的什么發(fā)送請求應該就OK了。
已經試過了確實可以hook 不過在隊列中 由于不是協(xié)程環(huán)境 es客戶端會報錯 嘗試判斷在非協(xié)程環(huán)境下用guzzle客戶端 不知道為啥還是會hook 然后報錯 此錯誤只會出現在X86架構 M系列芯片正常運行
目前解決方案是轉用Fiber驅動了
//composer.json 版本
"php": ">=8.1",
"workerman/webman-framework": "^2.1",
"elasticsearch/elasticsearch": "^8",
//部分代碼
use Workerman\Coroutine;
use Elastic\Elasticsearch\ClientBuilder;
function esClient($host = [])
{
$host = $host ?: [
env('ES_HOST', 'localhost:9200')
];
if (Coroutine::isCoroutine()) {
return ClientBuilder::create()
->setHosts($host)
->build();
}
return ClientBuilder::create()
->setHttpClient(new GuzzleHttp\Client()) // 設置自定義 Guzzle 客戶端
->setHosts($host)
->build();
}
//錯誤信息 此錯誤不會出現在M系列芯片 目前Centos8出現
PHP Fatal error: Uncaught Swoole\Error: API must be called in the coroutine in /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php:44
Stack trace:
#0 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(44): curl_exec()
#1 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(28): GuzzleHttp\Handler\CurlHandler->__invoke()
#2 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php(48): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
#3 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php(64): GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}()
#4 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
#5 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php(55): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#6 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Middleware.php(63): GuzzleHttp\RedirectMiddleware->__invoke()
#7 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/HandlerStack.php(75): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#8 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Client.php(333): GuzzleHttp\HandlerStack->__invoke()
#9 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Client.php(106): GuzzleHttp\Client->transfer()
#10 /www/wwwroot/webman/vendor/guzzlehttp/guzzle/src/Client.php(138): GuzzleHttp\Client->sendAsync()
#11 /www/wwwroot/webman/vendor/elastic/transport/src/Transport.php(351): GuzzleHttp\Client->sendRequest()
#12 /www/wwwroot/webman/vendor/elasticsearch/elasticsearch/src/Client.php(181): Elastic\Transport\Transport->sendRequest()
#13 /www/wwwroot/webman/vendor/elasticsearch/elasticsearch/src/Traits/ClientEndpointsTrait.php(83): Elastic\Elasticsearch\Client->sendRequest()
#14 /www/wwwroot/webman/app/functions.php(217): Elastic\Elasticsearch\Client->bulk()
#15 /www/wwwroot/webman/app/functions.php(175): collectionEsIndexIdUpd()
#16 /www/wwwroot/webman/app/functions.php(104): {closure}()
#17 /www/wwwroot/webman/app/queue/redis/fast/IpRecordQueue.php(44): business_exceute_context_data()
#18 /www/wwwroot/webman/app/service/IpRecordService.php(58): App\queue\redis\fast\IpRecordQueue->App\queue\redis\fast\{closure}()
#19 /www/wwwroot/webman/app/queue/redis/fast/IpRecordQueue.php(26): App\service\IpRecordService::lockUpd()
#20 /www/wwwroot/webman/vendor/workerman/redis-queue/src/Client.php(243): App\queue\redis\fast\IpRecordQueue->consume()
#21 /www/wwwroot/webman/vendor/workerman/redis/src/Client.php(421): Workerman\RedisQueue\Client->Workerman\RedisQueue\{closure}()
#22 /www/wwwroot/webman/vendor/workerman/workerman/src/Connection/TcpConnection.php(741): Workerman\Redis\Client->Workerman\Redis\{closure}()
#23 [internal function]: Workerman\Connection\TcpConnection->baseRead()
#24 /www/wwwroot/webman/vendor/workerman/workerman/src/Events/Event.php(250): EventBase->loop()
#25 /www/wwwroot/webman/vendor/workerman/workerman/src/Worker.php(1740): Workerman\Events\Event->run()
#26 /www/wwwroot/webman/vendor/workerman/workerman/src/Worker.php(1545): Workerman\Worker::forkOneWorkerForLinux()