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

http服務(wù),reload 熱更新代碼不生效

大白呀

問(wèn)題描述

線上有個(gè)分詞服務(wù),我修改了CutWordsServerEvent 的onMessage方法后,先清理opcache,然后執(zhí)行reload操作,代碼不生效,請(qǐng)教一下各位大佬,怎么解決
截圖

程序代碼或配置

class CutWordsServerCommand extends Command
{

protected $signature = 'cut-word-server {action} {--daemon}';

protected $description = '分詞服務(wù)';

public function __construct()
{
    parent::__construct();
}
public function handle()
{
    $action = $this->argument('action');
    if (!in_array($action, ['start', 'stop', 'reload'])) {
        $this->error('參數(shù)錯(cuò)誤');
        exit;
    }
    if ($this->option('daemon')) {
        Worker::$daemonize = true;
    }
    $httpWorker        = new Worker("http://0.0.0.0:8080");
    $httpWorker->count = 4;
    // 啟動(dòng)時(shí)執(zhí)行的回調(diào)函數(shù),這里可以執(zhí)行一些初始化操作
    $httpWorker->onWorkerStart = function (Worker $worker) {
        ini_set('memory_limit', '1024M');
        Jieba::init(['mode' => 'default', 'dict' => 'big']);
        Finalseg::init();
        JiebaAnalyse::init();
        $memory = getMemory();
        $this->info("進(jìn)程ID" . $worker->id . " 結(jié)巴分詞加載完畢,當(dāng)前內(nèi)存消耗{$memory}");
        require_once base_path().'/app/Events/CutWordsServerEvent.php';
        $worker->onMessage = [new CutWordsServerEvent(), 'onMessage'];
    };

    // 運(yùn)行 Worker,如果你不想在命令行運(yùn)行,可以注釋掉這行
    Worker::runAll();
}

}

class CutWordsServerEvent
{

public function onMessage($connection, Request $request)
{
    $startTime = microTimeFloat();
    $content   = trim($request->post('splitContent'));
    $topNum    = (int)$request->post('topNum', 15);
    $response  = new Response();
    $response->header('Content-Type', 'application/json');
    $response->header('Cache-Control', 'no-cache, private');

    if (empty($content)) {
        $result             = makeStdRes(-1, '請(qǐng)求參數(shù)錯(cuò)誤');
        $result['costTime'] = microTimeFloat() - $startTime;
        $response->withBody(json_encode($result));
        $connection->send($response);
        return;
    }

    $tags   = JiebaAnalyse::extractTags($content, $topNum);
    $result = makeStdRes(1, '分詞請(qǐng)求成功', $tags);
    $result['costTime'] = microTimeFloat() - $startTime;
    $response->withBody(json_encode($result));
    $connection->send($response);
}

}

我是靠注釋 $result['costTime'] = microTimeFloat() - $startTime; 請(qǐng)求接口得到的結(jié)果有沒(méi)有costTime 判斷代碼有沒(méi)有生效的

701 2 0
2個(gè)回答

walkor 打賞

文檔有說(shuō)明,寫(xiě)死在start.php 里的代碼無(wú)法熱更新。
把onWorkerStart里的業(yè)務(wù)代碼單獨(dú)放到一個(gè)文件里,然后onMessage的時(shí)候加載這個(gè)文件。

    $httpWorker->onWorkerStart = function (Worker $worker) {
        require_once __DIR_ . '/your/file.php';
    };
  • 大白呀 2024-11-01

    感謝您的回復(fù),但是我代碼是這樣的啊,我onMessage的代碼都放在 CutWordsServerEvent.php 里了, 是在onWorkerStart 時(shí)候用require_once 加載的。這是我的
    $httpWorker->onWorkerStart = function (Worker $worker) {
    ini_set('memory_limit', '1024M');
    Jieba::init(['mode' => 'default', 'dict' => 'big']);
    Finalseg::init();
    JiebaAnalyse::init();
    $memory = getMemory();
    $this->info("進(jìn)程ID" . $worker->id . " 結(jié)巴分詞加載完畢,當(dāng)前內(nèi)存消耗{$memory}");
    require_once base_path().'/app/Events/CutWordsServerEvent.php';
    $worker->onMessage = [new CutWordsServerEvent(), 'onMessage'];
    };
    這是官方文檔寫(xiě)的:
    以下代碼reload后會(huì)自動(dòng)更新
    $worker = new Worker('http://0.0.0.0:1234');
    $worker->onWorkerStart = function($worker) { // onWorkerStart是進(jìn)程啟動(dòng)后觸發(fā)的回調(diào)
    require_once __DIR__ . '/your/path/MessageHandler.php'; // 進(jìn)程啟動(dòng)后載入的文件支持熱更新
    $messageHandler = new MessageHandler();
    $worker->onMessage = [$messageHandler, 'onMessage'];
    };
    MessageHandler.php改動(dòng)后執(zhí)行 php start.php reload,MessageHandler.php會(huì)重新載入內(nèi)存達(dá)到更新業(yè)務(wù)邏輯的效果。

    我沒(méi)看出來(lái)有啥區(qū)別啊

nitron

意思是onWorkerStart內(nèi)的所有代碼都要放在一個(gè)文件里require,你上面的代碼有一部分沒(méi)有在require的文件里?

  • 暫無(wú)評(píng)論
??