我用Gateway做了一個物聯(lián)網(wǎng)平臺提供TCP服務端功能,供各個設備作為客戶端連接,然后進行通訊。目前有一個需求:有些客戶端設備連接后,需要服務端定時下發(fā)指令給客戶端,比如每一秒下發(fā)一次指令給客戶端,客戶端返回數(shù)據(jù)報文,典型的如MODBUS協(xié)議。
請教一下關于這個定時下發(fā)的方案設計,怎么設計比較合理。
我現(xiàn)在采用的方案是:客戶端連接成功之后,在onMessage里啟動Timer定時器,連接斷開后del。比較擔心如果客戶端數(shù)量過多的時候這種方案會不會影響性能。
可以每個客戶端一個定時器,客戶端連接斷開后記得刪除定時器就行。
關于定時器性能影響,主要看定時器執(zhí)行的業(yè)務和總頻率。比如1萬個定時器,每10秒執(zhí)行一次的性能消耗和1000個定時器每秒執(zhí)行1次的消耗基本是一樣的。如果定時器里執(zhí)行的是調(diào)用sendToClient的業(yè)務,預計每個cpu可以執(zhí)行幾千次到上萬次。
老大我的業(yè)務和他的基本一樣,已完成編碼,目前用遞歸的方式掉定時器執(zhí)行,但是因為busy出現(xiàn)丟包現(xiàn)象,我進行了一些優(yōu)化都不太理想,您可以指點下嗎,https://wenda.workerman.net/question/7500