在workerman基礎(chǔ)上開發(fā)了客服系統(tǒng)遇到特殊問題:每一天上午總會(huì)有錯(cuò)誤,說uid有錯(cuò),等重啟動(dòng)workerman服務(wù)之后,就一切正常了,不知道是何原因。請(qǐng)群主解答一下。
你uid是通過mysql得到的吧
可能你的mysql用了單例模式或者全局mysql實(shí)例,即創(chuàng)建一個(gè)鏈接后,后續(xù)請(qǐng)求全部復(fù)用了這個(gè)實(shí)例,也就是說復(fù)用了這個(gè)mysql鏈接。
這種復(fù)用mysql鏈接的情況需要注意的是:當(dāng)這個(gè)鏈接一直是空閑的(沒有數(shù)據(jù)傳輸),mysql服務(wù)端會(huì)單方面斷開鏈接,但是php的mysql實(shí)例還是存在的,這時(shí)再使用這個(gè)實(shí)例就會(huì)報(bào)錯(cuò)(錯(cuò)誤碼2006,有個(gè)類似mysql gone away的錯(cuò)誤)。
解決方法:
1、判斷錯(cuò)誤碼,如果是2006就重新創(chuàng)建個(gè)mysql實(shí)例
2、不使用全局mysql實(shí)例,每次使用數(shù)據(jù)庫時(shí)重新創(chuàng)建一個(gè)實(shí)例
3、將mysql服務(wù)端的wait_timeout值,設(shè)置為365天(不建議,mysql重啟或者網(wǎng)絡(luò)有問題鏈接同樣會(huì)斷開)
可以將開發(fā)環(huán)境 mysql的wait_timeout參數(shù)調(diào)低,然后進(jìn)行驗(yàn)證調(diào)試