国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

webman 開啟 swoole 協(xié)程后能直接使用 http 和 es 客戶端嗎

破建站的

不知道會(huì)不會(huì)阻塞當(dāng)前進(jìn)程

還請(qǐng) walkor 大佬解答一下

442 5 0
5個(gè)回答

walkor 打賞

一般來說都是非阻塞的,實(shí)際需要自己測(cè)試下

  • 暫無評(píng)論
jack10082009

一鍵協(xié)程化以后,swoole會(huì)hook使用curl方式發(fā)送的http(s)請(qǐng)求。
我記得老大在文檔里面說過其實(shí)就是老大在workerman中封裝了那些協(xié)程化驅(qū)動(dòng)。所以你就是看一下異步http客戶端的實(shí)現(xiàn)是使用的什么發(fā)送請(qǐng)求應(yīng)該就OK了。

  • 暫無評(píng)論
破建站的

已經(jīng)試過了確實(shí)可以hook 不過在隊(duì)列中 由于不是協(xié)程環(huán)境 es客戶端會(huì)報(bào)錯(cuò) 嘗試判斷在非協(xié)程環(huán)境下用guzzle客戶端 不知道為啥還是會(huì)hook 然后報(bào)錯(cuò) 此錯(cuò)誤只會(huì)出現(xiàn)在X86架構(gòu) M系列芯片正常運(yùn)行

目前解決方案是轉(zhuǎn)用Fiber驅(qū)動(dòng)了

//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())  // 設(shè)置自定義 Guzzle 客戶端
        ->setHosts($host)
        ->build();

}

//錯(cuò)誤信息 此錯(cuò)誤不會(huì)出現(xiàn)在M系列芯片 目前Centos8出現(xiàn)
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()
  • 輕云蔽月 15天前

    看起來像是在隊(duì)列中也設(shè)置了SWOOLE_HOOK_ALL,當(dāng)這個(gè)一設(shè)置,會(huì)馬上替換原本的阻塞函數(shù)為非阻塞函數(shù)

胡桃

人家都跟你說了要在協(xié)程環(huán)境使用協(xié)程API

  • 破建站的 23天前

    我有在處理協(xié)程問題 只是沒解決 你的業(yè)務(wù)邏輯封裝好了后 你在隊(duì)列進(jìn)程還要搞兩套代碼運(yùn)行嗎

  • 破建站的 23天前

    你的評(píng)論很不友善 要是不想回答 大可不必在這里說話

你可以用Fiber驅(qū)動(dòng)的協(xié)程,es可以用Guzzle來封裝客戶端,Guzzle 可以引入 amphp/http-client-guzzle-adapter 提供協(xié)程支持

  • 破建站的 8天前

    目前解決方案只能使用 fiber。 已知 guzzle 客戶端在 swoole 環(huán)境中正常運(yùn)行,但進(jìn)入到隊(duì)列中就無法正常使用了,如果要完全兼容的話,可能也要像 hyperf 官方出一套自己的客戶端才能正常使用

??