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