我建立了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í)行呢?
請指點下,謝謝!