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

Event.php里面的寫(xiě)定時(shí)器發(fā)送隨機(jī)消息

rookie
class Event
{
  public static $timer_id;
  public static function onMessage($client_id, $message)
  {

       switch($message_data)
       {

         case 're_login':  //登錄時(shí)創(chuàng)建定時(shí)器
           $time_interval =60;
           self::$timer_id = \Workerman\Lib\Timer::add($time_interval, function(){
               //要執(zhí)行的邏輯
               var_dump(111);
                Gateway::sendToClient(...)//給對(duì)應(yīng)的房間對(duì)應(yīng)的客戶端發(fā)送一條隨機(jī)消息
           }
           return;
       }

  }

  public static function onClose($client_id)
   {
       \Workerman\Lib\Timer::del(self::$timer_id);//客戶端退出時(shí)清除定時(shí)器

   }

}

代碼貌似錯(cuò)了,當(dāng)客戶端退出時(shí)無(wú)法清除定時(shí)器??刂婆_(tái)到時(shí)間照樣輸出111。大神們幫忙解決一下唄。

4025 2 0
2個(gè)回答

walkor 打賞

1、businessWorker是多進(jìn)程的,客戶端發(fā)來(lái)的請(qǐng)求默認(rèn)是gateway隨機(jī)轉(zhuǎn)發(fā)給businessWorker處理,
也就是創(chuàng)建定時(shí)器的進(jìn)程和運(yùn)行onClose刪除定時(shí)器的進(jìn)程不是同一個(gè)進(jìn)程,會(huì)導(dǎo)致刪除定時(shí)器失敗。
解決方法:設(shè)置gateway到businessWorker的路由,讓同一個(gè)客戶端的請(qǐng)求都轉(zhuǎn)發(fā)給某個(gè)固定的businessWorker進(jìn)程,可以直接使用gatewayWorker手冊(cè)路由
http://workerman.net/gatewaydoc/gateway-worker-development/router.html
中的范例 2 隨機(jī)綁定來(lái)達(dá)到這一目的。

2、按照樓主需求,定時(shí)器id $timer_id 不能放在類的靜態(tài)常量中,因?yàn)檫@樣不管有多少各客戶端設(shè)置了定時(shí)器,這里的值只有一個(gè),也就是只保存了最后一個(gè)定時(shí)器的$timer_id ,前面的都被覆蓋了。
解決方法:將定時(shí)器的$timer_id 存儲(chǔ)在$_SESSION中
GatewayWorker $_SESSION參見(jiàn)手冊(cè) http://workerman.net/gatewaydoc/gateway-worker-development/session.html

public static function onMessage(..)
{
...
case 're_login': //登錄時(shí)創(chuàng)建定時(shí)器
$_SESSION = \Workerman\Lib\Timer::add(...
...
}

public static function onClose(..)
{
\Workerman\Lib\Timer::del($_SESSION);
}

最后建議帶著需求把手冊(cè)多看幾遍再來(lái)寫(xiě)程序,可以大大加快開(kāi)發(fā)速度

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

謝謝walkor

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??