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

GatewayWorker 中Timer問題

xxj

我建立了4個worker進程,在設備連接后,會開啟一個20秒的任務。因為設備信號的問題,有時設備會斷開后又重連,這時候會與服務器建立新的連接。在新的連接中,我會判斷設備是否時這種斷了又連的情況,如果是這種情況我會用Gateway::closeClient($old_client_id);
關閉老連接,在onclose 事件中 去刪除 在老連接開啟的20秒任務。現在又兩問題:
1:有時20秒任務 突然不運行了。這個時根據設備端發(fā)送的心跳信息判斷的,正常在20秒任務中,我會與設備通訊一次。因此設備是不會發(fā)送心跳信號的,如果60秒設備與服務器之前沒有通訊就會發(fā)送心跳。因此服務端接收到心跳時,我只有重新開始一個20秒任務,來解決這個Timer失效的問題;
2:在onclose 刪除定時器時,有時候覺得好像沒有刪除掉,因為對于的邏輯還在運行,還在向數據庫寫數據。是否時因為開啟了多個進程的原因,執(zhí)行刪除定時器所在進程和創(chuàng)建定時器所在進程不一致,因此通過Timer.del(?),這個?對于的定時器不存在呢?
3:我如何知道到底當前不同的worker進程中有哪些定時器任務在執(zhí)行呢?
請指點下,謝謝!

2712 2 0
2個回答

six

利用心跳可以關閉老的無用連接。
設置

$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 1;

這樣55秒內沒有發(fā)心跳的設備的連接會自動close,不用手動調用closeClient()

  • xxj 2021-03-09

    這個知道了,謝謝。主要還Timer定時任務為什么不執(zhí)行了。

  • six 2021-03-09

    有可能你認為沒在執(zhí)行,實際上在執(zhí)行,定時函數里第一行打日志看下

不敗少龍

還是要用workerman的定時器方法去執(zhí)行

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