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

workerman\mqtt subscribe訂閱問題

iHalo

根據(jù)官方示例
在 onWorkerStart的回調(diào)中進(jìn)行創(chuàng)建mqtt客戶端,然后進(jìn)行訂閱
但官方是訂閱一個topic
我現(xiàn)在的需求是以數(shù)組的方式進(jìn)行多個topic訂閱,
數(shù)組來源于數(shù)據(jù)庫,
發(fā)現(xiàn)命令行運(yùn)行之后,數(shù)據(jù)庫訂閱信息進(jìn)行更新但是workerman創(chuàng)建的mqtt客戶端里面訂閱的仍然是之前的數(shù)據(jù),
目前解決的辦法是手動reload命令行,
請問官方人員和其他有經(jīng)驗的大佬,這個問題如何在不重啟命令行的情況下進(jìn)行處理。
也嘗試過如下代碼,但不知合不合理。希望官方給予回復(fù)。

如上,測試每10秒進(jìn)行訂閱,訂閱信息確實能夠及時更新了,但是沒有測試其他功能是否正常,希望官方給予最佳實踐,感謝!

2177 5 2
5個回答

iHalo

剛才測了上述方法,訂閱是能更新了,但是onMessage回調(diào)沒有執(zhí)行,一直在執(zhí)行上面的循環(huán)。

  • 2548a 2022-04-26

    只要你看過workerman開發(fā)必讀就不會問這種問題
    7、不要使用exit die sleep語句

    業(yè)務(wù)執(zhí)行exit die語句會導(dǎo)致進(jìn)程退出,并顯示W(wǎng)ORKER EXIT UNEXPECTED錯誤。當(dāng)然,進(jìn)程退出了會立刻重啟一個新的進(jìn)程繼續(xù)服務(wù)。如果需要返回,可以調(diào)用return。sleep語句會讓進(jìn)程睡眠,睡眠過程中不會執(zhí)行任何業(yè)務(wù),框架也會停止運(yùn)行,會導(dǎo)致該進(jìn)程的所有客戶端請求都無法處理。
    9、業(yè)務(wù)代碼里不要有死循環(huán)

    業(yè)務(wù)代碼里不要有死循環(huán),否則會導(dǎo)致控制權(quán)無法交還給workerman框架,導(dǎo)致無法接收處理其它客戶端消息。

  • iHalo 2022-04-26

    看過開發(fā)必讀,忘記了。手冊來回翻,看一點(diǎn)忘一點(diǎn)。。。

iHalo

@walkor

  • 暫無評論
manbuheiniu

感覺這個邏輯有問題,onConnent是連接回調(diào),不應(yīng)該在這里面訂閱。訂閱是阻塞任務(wù)。
我認(rèn)為應(yīng)該是另起一個進(jìn)程訂閱,收到數(shù)據(jù)后通知已連接的客戶端??蛻舳诉B接成功后可以把需要通知的客戶端ID放到redis,然后保持在線就可以。訂閱進(jìn)程拿到數(shù)據(jù)后查redis看需要給哪個客戶端推送。
個人理解,不一定對,僅限參考

iHalo

也考慮過使用 Timer 一段時間后執(zhí)行命令行重啟

但這樣涉及到liunx用戶權(quán)限以及操作處理是否成功或者異常等問題,沒有深入研究過,測試在Worker的onWorkerReload回調(diào)成功執(zhí)行,但依然覺得并不是最佳實踐。

  • 暫無評論
six

onWorkerStart里用定時器

\Workerman\Timer::add(10, function(){
    $this->subscribe(Handle::getSubscribe());
});
  • iHalo 2022-04-26

    感謝回答,我試一下

  • iHalo 2022-04-26

    這個方法可行!感謝。但是不知道是不是會影響onMessage的業(yè)務(wù)處理,原理我不太明白。

  • walkor 2022-04-26

    死循環(huán)影響,因為workerman得不到進(jìn)程控制權(quán),無法執(zhí)行onmessage。定時器執(zhí)行完歸還控制權(quán),workerman就可以監(jiān)聽觸發(fā)onMessage

  • iHalo 2022-04-26

    好的,了解了。大佬還有其他方法推薦嗎,或者最佳實踐應(yīng)該怎么做。

  • walkor 2022-04-26

    沒有最佳,只有更適合你的,用six的方法就行了。

  • iHalo 2022-04-26

    好的,感謝

年代過于久遠(yuǎn),無法發(fā)表回答
??