弱網(wǎng)環(huán)境測試與重復(fù)提交問題總結(jié)
一、弱網(wǎng)環(huán)境測試
所謂弱網(wǎng)環(huán)境簡單來說就是網(wǎng)絡(luò)質(zhì)量較差導(dǎo)致丟包和延遲等現(xiàn)象,具體現(xiàn)象就是app響應(yīng)很慢。測試工具用的是強大的fillder(沒用過的自行g(shù)oogle),fiddler是通過延遲發(fā)送或接收數(shù)據(jù)的時間來模擬限速,設(shè)置方法是:Rules → Performances → Simulate Modem Speeds,然后按Ctrl+r快捷鍵會自動打開一個CustomRules.js文件,里面有各種自定義的規(guī)則。其中有這么一段:
if (m_SimulateModem) { oSession["request-trickle-delay"] = "300"; oSession["response-trickle-delay"] = "150"; }
意思是每延遲300ms發(fā)送1kb的數(shù)據(jù),每延遲150ms下行1kb的數(shù)據(jù),具體值可以修改,自定義限速。定義完數(shù)據(jù)保存之后,已經(jīng)勾選的SimulateModem Speeds會被取消,按照上面的步驟再次將其勾選即可。
再說下通過fillder來調(diào)試手機app運行所需要的基本設(shè)置:
設(shè)置手機代理IP和端口
找到手機的設(shè)置–>WLAN–>已連接的WiFi,長按,彈出修改網(wǎng)絡(luò)的選項,點擊進入,在“顯示高級選項”前打鉤,將電腦的IP和端口設(shè)置進去,端口一般選的是8080,但是可能會出現(xiàn)此端口被占用的情況,選擇其他端口也可以。
2.設(shè)置filler,如下圖
3.打開app點擊簽到功能,發(fā)現(xiàn)簽到響應(yīng)緩慢,可重復(fù)點擊,這就造成了幾乎同一時間,同一個用戶有多個簽到請求發(fā)送到服務(wù)器,這幾個請求檢查是否已經(jīng)簽到時發(fā)現(xiàn)當(dāng)天記錄為空(還都沒有來得及寫進到數(shù)據(jù)庫),這樣在高并發(fā)的情況下就會有多條記錄同時寫入簽到記錄表。
二、并發(fā)重復(fù)提交解決方案
弱網(wǎng)環(huán)境所引發(fā)的這個并發(fā)重復(fù)提交問題,在服務(wù)器端有一個比較簡單的解決方案:利用mysql***索引機制的驗證,當(dāng)有重復(fù)數(shù)據(jù)寫入時就會被拒絕,保證數(shù)據(jù)的***性。
另外一種方案是利用redis計數(shù)器特性,由于redis是單線程原子性操作,不存在多線程并發(fā)的問題,將userId和年月日作為key,每次簽到請求進來加1,如果得到的值等于1,說明這是當(dāng)天***次簽到,寫入數(shù)據(jù)庫,如果大于1,則直接返回“已簽到”信息提醒用戶即可。