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

關(guān)于程序代碼中出現(xiàn)異常后的程序運行邏輯請教

huboy

我在實際項目中碰到這樣一種情況:

在一個物聯(lián)網(wǎng)平臺中,目前僅接入了大約500臺設(shè)備,其中一半的設(shè)備設(shè)置了5分鐘強制斷線重連服務(wù)器功能,一半的設(shè)備設(shè)置為一旦鏈接服務(wù)器,保持在線功能。

程序邏輯如下

OnConnect 中,設(shè)備鏈接服務(wù)器的時候,設(shè)置定時器(定時器的作用是定時往這個設(shè)備發(fā)送一個指令并在OnMessage中接收返回數(shù)據(jù))

同時在 onClose 中,關(guān)閉設(shè)置的定時器

然后在onWorkerStart 中設(shè)置了一個定時器,作用是每小時做一些數(shù)據(jù)庫的操作之類的。

在正常的情況下,此程序運行正常。

目前發(fā)生了一個狀況,因為某些原因,onWorkerStart 中的定時器在操作數(shù)據(jù)庫的時候,因為SQL語句錯誤的原因造成此定時器內(nèi)程序運行錯誤,并拋出異常。后果是 設(shè)置了5分鐘強制重連服務(wù)器的設(shè)備依然可以正常發(fā)送數(shù)據(jù)且接收返回,設(shè)置保持在線功能的設(shè)備從拋出異常開始,設(shè)置的定時器再也不發(fā)送數(shù)據(jù),當(dāng)然也就沒有任何返回。

所以,猜測,程序運行邏輯:當(dāng)onWorkerStart 運行錯誤后,Gateway內(nèi)部有一個機制會強制將 OnConnect onClose onWorkerStart 等都運行一遍。如果是這樣的話,那我這個項目當(dāng)中碰到的情況也就有了合理的解釋。

不知道如上理解是否正確?

另請教:對于echo類的輸出可以用日志來保存,對于程序運行異常是否也有日志記錄呢?或者說是否有忽略錯誤繼續(xù)運行程序的方式(主要是某些考慮不周的原因?qū)е铝薙QL語句錯誤進而引發(fā)異常)

3425 3 0
3個回答

huboy

附加一點沒說明白的,當(dāng)onWorkerStart運行錯誤后,程序會強制運行onClose(但僅僅只是運行了這個代碼,并沒有實際斷開設(shè)備的鏈接),導(dǎo)致定時器刪除了,但是設(shè)備的鏈接還在。

  • 暫無評論
walkor 打賞

businessWorker進程退出會導(dǎo)致進程內(nèi)所有的定時器都會銷毀。
所以之前OnConnect onClose onWorkerStart添加的定時器都會銷毀。

程序異常退出的日志會記錄在workerman.log中。

要忽略異常繼續(xù)執(zhí)行可以在可能發(fā)生異常的地方自行try catch異常。不過異常最好都記錄下來,方便排錯,不然發(fā)生了異常導(dǎo)致業(yè)務(wù)異常,但是程序看不到報錯很難定位。

生產(chǎn)環(huán)境上線的代碼都要經(jīng)過嚴格測試,最好不要有SQL語法錯誤這種低級錯誤。

  • 暫無評論
huboy

非常感謝!了解了!

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