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