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

workerman可以加上amphp的擴展解決http阻塞問題嗎

psocket

問題描述

怎么修改源碼讓workerman的http轉(zhuǎn)為非阻塞呀

1826 4 0
4個回答

six

訪問外部http接口用 workerman/http-client ,是非阻塞的

  • psocket 2023-04-08

    就是在創(chuàng)建http服務(wù),我打印了同時訪問的時候有阻塞,在swoole中的http服務(wù)沒有出現(xiàn)阻塞

  • psocket 2023-04-08

    是打印時間戳的時候

  • six 2023-04-08

    workerman是php開發(fā)的框架,不會改變php的行為,如果你調(diào)用的php函數(shù)是阻塞函數(shù),那就是阻塞的,否則就是非阻塞的。
    swoole是一個擴展,可以改變php的行為,比如阻塞調(diào)用變成協(xié)程非阻塞,不過開啟協(xié)程要使用上下文,考慮全局變量污染問題,如果使用了第三方庫需要對其改造,開發(fā)商會有一點難度。

  • psocket 2023-04-09

    沒有打印hello的時候workerman可以看出來有阻塞

  • psocket 2023-04-09

    沒有任何阻塞函數(shù)

  • six 2023-04-09

    你的代碼怎么寫的?你怎么看出來阻塞的?

  • psocket 2023-04-14

    就是單單的創(chuàng)建一個workerman的http服務(wù)和swoole的協(xié)程http服務(wù)內(nèi)寫同樣的時間打印出現(xiàn)時間方面相應(yīng)有幾百微秒的差別

  • six 2023-04-14

    打印是阻塞函數(shù),echo 'hello'; 實際上就是 fwrite(STDOUT, 'hello');,向 fd為2的文件寫入數(shù)據(jù)

  • psocket 2023-04-14

    當(dāng)一個進程還沒執(zhí)行完的話,那么其他想進入這個進程的話就進不來了嗎

  • six 2023-04-14

    進不來。如果有阻塞調(diào)用想提高并發(fā),設(shè)置$worker->reusePort=true;, 增加進程數(shù)就好了。比如進程開到cpu的4倍。
    如果你喜歡swoole的協(xié)程,也可以設(shè)置swoole為底層驅(qū)動

    <?php
    require 'vendor/autoload.php';
    use Workerman\Events\Swoole;
    use Workerman\Worker;
    
    Worker::$eventLoopClass = Swoole::class;
    $worker = new Worker('http://0.0.0.0:9898');
    $worker->onWorkerStart = function () {
        Swoole\Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
    };
    $worker->onMessage = function ($connection, $request) {
        $connection->send('hello');
    };
    Worker::runAll();

    這樣workerman也具有swoole的協(xié)程能力了。
    使用協(xié)程后需要改造第三方庫,包括避免全局變量污染、全局變量使用context、避免協(xié)程同時公用同一個資源例如數(shù)據(jù)庫。反正就是解決同一個進程并發(fā)執(zhí)行導(dǎo)致的問題。

  • Tianor 2023-04-14

    大佬可以幫我看看不

admin

可以結(jié)合yield,PHP的自帶的協(xié)程,迭代器。不過需要注意上面老哥說的,在攜程中要注意上下文變量,因為你一旦使用了迭代器,在當(dāng)前進程中就不是單線程的阻塞了,而是一個多線程的環(huán)境,如果你自己能處理或者第三方的包可以區(qū)別上下文就行

  • chaz6chez 2023-04-14

    php用了yield結(jié)合event-loop依然是單線程,只不過在上下文順序上可能和自己所寫的順序不同,導(dǎo)致數(shù)據(jù)污染

  • chaz6chez 2023-04-14

    swoole/swow區(qū)別于php,是在當(dāng)前php線程上增加了獨立的另一個線程,用于處理協(xié)程的調(diào)度和分配,所以是多線程的情況

真的是你呀

workerman5可以了

artisan

問的應(yīng)該是http-server吧?
amphp出了一個 amphp/http-server(一個進程處理多個請求,一個請求阻塞則掛起,繼續(xù)處理其他請求?)

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??