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

關(guān)于webman使用fastcgi_finish_request函數(shù)的類似效果的方案

wgole

問題描述

有時候處理請求時需要快速響應(yīng)用戶,而把慢業(yè)務(wù)繼續(xù)留在進程里執(zhí)行,就像php-fpm使用fastcgi_finish_request函數(shù)就能達到這個效果。我知道webman是php進程處理請求,我想問用webman有沒有這種類似的處理慢業(yè)務(wù)方案?

除了文檔里提到的使用 隊列、慢業(yè)務(wù)進程等方案,還有其他方案嗎?

為此你搜索到了哪些方案及不適用的原因

文檔里提到的使用 隊列、慢業(yè)務(wù)獨立進程等方案,這些會增加程序設(shè)計復(fù)雜度。

本來一個簡簡單單的需求增加了復(fù)雜度。我只想在當(dāng)前控制器里處理對應(yīng)的慢業(yè)務(wù),同時也能快速響應(yīng)用戶的請求。傳統(tǒng)的php-fpm使用fastcgi_finish_request()后,后面再寫慢業(yè)務(wù)代碼,這樣就能完美解決問題。

案例1:
收到支付回調(diào)(如微信、支付寶等)時,驗證成功并保存數(shù)據(jù)庫支付表后就要馬上把處理結(jié)果響應(yīng)回去,而后續(xù)的其他操作再慢慢執(zhí)行,例如,后續(xù)處理通知游戲發(fā)放元寶、記錄日志等操作,這些常常因為第三方網(wǎng)絡(luò)、服務(wù)器問題,或者IO問題導(dǎo)致處理速度比較慢。

在php-fpm項目中我基本都這樣操作的:

register_shutdown_function(['Util', 'shutdown_function'], null, [], true);

//Util class...
public static function shutdown_function($func, $params = [], $end = false)
{
    static $stack = [];
    if ($func) {
        $stack[] = [
            'func' => $func,
            'params' => $params
        ];
    }

    if ($end) {
        function_exists('fastcgi_finish_request') && fastcgi_finish_request();

        foreach ($stack as $v) {
            call_user_func_array($v['func'], $v['params']);
        }
    }
}
579 4 0
4個回答

胡桃

Workerman現(xiàn)在沒有FileAsync組件,后續(xù)的操作一樣堵著,多開幾個進程就行了

  • 暫無評論
tanhongbin

fastcgi_finish_request 如果返回用戶信息成功了,但是 后續(xù)的業(yè)務(wù)處理失敗了 怎么搞???隊列是最保險的,而且你項目不用redis嘛? 如果用就是 一個命令安裝包的事,你這種異步 太危險了 數(shù)據(jù)容易丟失

  • wgole 2024-12-11

    需要異步的情況下,一般都不是很重要的東西,處理失敗就失敗了,況且丟失的概率很低,只有進程突然停掉才會丟失。

  • tanhongbin 2024-12-11

    還是隊列靠譜 而且fpm的異步 就是個笑話,生產(chǎn)都不會用的,數(shù)據(jù)量一上來 fpm就趴下了

nitron

我以前開皮卡,要多裝貨物就加一個拖掛就好,現(xiàn)在我開跑車了,請問多裝貨物怎么加拖掛

six

用定時器,效果和 fastcgi_finish_request 一樣

use Workerman\Timer;
Timer::add(0.001, function(){}, [], false);

建議慢業(yè)務(wù)用隊列,fastcgi_finish_request 這種機制都不適合運行太慢的業(yè)務(wù),會影響正常業(yè)務(wù)請求。

  • wgole 2024-12-11

    我倒沒想到這個方法,確實能達到異步效果

??