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

如何實現(xiàn)僅能創(chuàng)建1個定時器

WJ825433525

問題描述

我在瀏覽器中,點擊一個按鈕a,啟動了一個定時器A,我又點擊了相同的按鈕a,又啟動了一個定時器B(定時器A和定時器B是實現(xiàn)相同的功能的),如何實現(xiàn):點擊一個按鈕,只能啟動一個定時器A,再次點擊這個按鈕后,無法新建定時器B?代碼如下:

   public function onConnect($connection)
    {
        // 定義并執(zhí)行一個定時器
        $time_interval = 5;// 每5秒執(zhí)行一次定時器
        // 給connection對象臨時添加一個timer_id屬性保存定時器id
        $connection->timer_id = Timer::add($time_interval, function () use ($connection) {
            // 連接數(shù)據(jù)庫并時時取出數(shù)據(jù)
            $id = '1DF22E206ACE919DC47E1A840594CC72';
            $infoMessage = Db::name('message')->find($id);
            $data = $infoMessage['title'];

            // 將數(shù)據(jù)庫數(shù)據(jù)時時發(fā)送給客戶端
            $connection->send($data);
            file_put_contents("wangjing.txt", "定時器ID:" . $connection->timer_id . ",時時數(shù)據(jù):" . $data . ",當(dāng)前時間:" . date("y-m-d H:i:s") . "\n", FILE_APPEND | LOCK_EX);
        });
        file_put_contents("wangjing.txt", "定時器ID為:$connection->timer_id\n", FILE_APPEND | LOCK_EX);//有多少個子進(jìn)程,就會打印多少個定時器ID
    }
1164 1 0
1個回答

chaz6chez

用共享內(nèi)存Apcu或者redis增加一個業(yè)務(wù)鎖,定時器結(jié)束時銷毀鎖;
APCu是血緣關(guān)系進(jìn)程可以共享,redis無限制甚至可以不是一臺服務(wù)器實例,根據(jù)自身情況選擇;
當(dāng)點擊按鈕時,創(chuàng)建鎖并創(chuàng)建定時器,如果創(chuàng)建鎖失敗了,則忽略;注意在定時器銷毀時回收鎖;

  • WJ825433525 2023-06-17

    謝謝回答。但是你的方案需要利用其它的技術(shù)來實現(xiàn),我想問:workerman本身能否避免重復(fù)創(chuàng)建定時器?

  • chaz6chez 2023-06-17

    目前定時器沒有實現(xiàn),定時器id是自增的,你也可以通過利用workerman的eventloop自行實現(xiàn)定時器,使用靜態(tài)數(shù)組保存timer的id,判斷id是否存在

年代過于久遠(yuǎn),無法發(fā)表回答
??