RT,項(xiàng)目是一個(gè)聊天類小程序,使用的是workerman3.x的websockert,沒有使用gatewayWorker。
項(xiàng)目存在一個(gè)問題:當(dāng)多個(gè)用戶同時(shí)發(fā)送數(shù)據(jù)傳送較大的文件如圖片,或者發(fā)送文字之類的頻率過快時(shí)會(huì)出現(xiàn)嚴(yán)重的卡頓丟包現(xiàn)象,部分用戶連接會(huì)中斷,在當(dāng)前發(fā)送數(shù)據(jù)的用戶發(fā)送操作未執(zhí)行完成之前,所有用戶都無(wú)法重連上,請(qǐng)問產(chǎn)生這個(gè)問題的原因有什么呢?我該如何嘗試解決呢?
ps:項(xiàng)目服務(wù)器為windows,40核。
windows服務(wù)器最多支持250個(gè)連接。
?正式環(huán)境請(qǐng)使用linux服務(wù)器,并嚴(yán)格按照手冊(cè)優(yōu)化好linux內(nèi)核并安裝event擴(kuò)展。
?
http://doc.workerman.net/appendices/kernel-optimization.html
http://doc.workerman.net/install/install.html
?
不要用websocket發(fā)送大的數(shù)據(jù)比如圖片數(shù)據(jù),否則會(huì)占數(shù)據(jù)傳輸通道導(dǎo)致卡頓。
比如使用同一個(gè)websocket連接發(fā)送圖片數(shù)據(jù)后,再發(fā)送消息,消息會(huì)在瀏覽器排隊(duì)等待文件發(fā)送完畢后才發(fā)送消息,導(dǎo)致延遲或者卡頓。?
?
發(fā)送圖片最好有http 上傳到文件服務(wù)器,得到url后通過websocket發(fā)送 img 標(biāo)簽。這樣不會(huì)影響其它消息傳輸
圖片是使用http傳輸后發(fā)送圖片id回到websocket再發(fā)送數(shù)據(jù)的,這個(gè)應(yīng)該不是影響的原因,但是傳輸完圖片發(fā)送id也是根據(jù)隊(duì)列排的,人多時(shí)也會(huì)堵塞,這是什么原因呢?
如果業(yè)務(wù)里有阻塞的操作,比如讀寫數(shù)據(jù)庫(kù)redis等,阻塞是正常的。推薦workerman里盡量不做存儲(chǔ)讀寫,只做消息轉(zhuǎn)發(fā)。workerman在windows下最多支持250個(gè)連接,如果超過這個(gè)連接數(shù),會(huì)導(dǎo)致消息延遲卡頓甚至斷開。