我菜鳥,對(duì)workerman的機(jī)制還不是很了解
在onWorkerStart中,先從mysql獲取到指定的member的數(shù)據(jù),然后循環(huán)這些member,每個(gè)member都單獨(dú)建立ws鏈接請(qǐng)求。
但問(wèn)題是,數(shù)據(jù)庫(kù)是會(huì)變動(dòng)的,會(huì)有新的member加入,會(huì)有member狀態(tài)修改。那么在onWorkerStart進(jìn)程執(zhí)行過(guò)程當(dāng)中,怎么實(shí)時(shí)獲取到最新的member數(shù)據(jù)呢?
1、單就論如何近乎實(shí)時(shí)的獲取數(shù)據(jù),方法很多,比如主動(dòng)拉的話,可以考慮使用workerman-timer定時(shí)器;
2、另外提示幾個(gè)注意事項(xiàng):
(1)數(shù)據(jù)庫(kù)連接句柄初始化不要放在主進(jìn)程代碼里,盡管是單進(jìn)程不會(huì)有問(wèn)題,小心將來(lái)切換到多進(jìn)程環(huán)境會(huì)引發(fā)unexpected error,所以養(yǎng)成好習(xí)慣一般在onWorkerStart里初始化,具體為啥,手冊(cè)都有。
(2)根據(jù)查詢出來(lái)的member數(shù)量來(lái)初始化對(duì)應(yīng)數(shù)量的異步連接對(duì)象,這個(gè)也很嚇人,除非對(duì)這個(gè)數(shù)量級(jí)別可控,否則可能因瞬時(shí)TCP連接暴漲導(dǎo)致可能的內(nèi)存吃緊甚至OOM,所以要需要適時(shí)的考慮復(fù)用連接策略。