天天看點

弱網環境測試與重複送出問題總結

一、弱網環境測試

所謂弱網環境簡單來說就是網絡品質較差導緻丢包和延遲等現象,具展現象就是app響應很慢。測試工具用的是強大的fillder(沒用過的自行google),fiddler是通過延遲發送或接收資料的時間來模拟限速,設定方法是:rules → performances → simulate modem speeds,然後按ctrl+r快捷鍵會自動打開一個customrules.js檔案,裡面有各種自定義的規則。其中有這麼一段:

意思是每延遲300ms發送1kb的資料,每延遲150ms下行1kb的資料,具體值可以修改,自定義限速。定義完資料儲存之後,已經勾選的simulatemodem speeds會被取消,按照上面的步驟再次将其勾選即可。

再說下通過fillder來調試手機app運作所需要的基本設定:

設定手機代理ip和端口

找到手機的設定–>wlan–>已連接配接的wifi,長按,彈出修改網絡的選項,點選進入,在“顯示進階選項”前打鈎,将電腦的ip和端口設定進去,端口一般選的是8080,但是可能會出現此端口被占用的情況,選擇其他端口也可以。

2.設定filler,如下圖

弱網環境測試與重複送出問題總結

3.打開app點選簽到功能,發現簽到響應緩慢,可重複點選,這就造成了幾乎同一時間,同一個使用者有多個簽到請求發送到伺服器,這幾個請求檢查是否已經簽到時發現當天記錄為空(還都沒有來得及寫進到資料庫),這樣在高并發的情況下就會有多條記錄同時寫入簽到記錄表。

二、并發重複送出解決方案

弱網環境所引發的這個并發重複送出問題,在伺服器端有一個比較簡單的解決方案:利用mysql唯一索引機制的驗證,當有重複資料寫入時就會被拒絕,保證資料的唯一性。

另外一種方案是利用redis計數器特性,由于redis是單線程原子性操作,不存在多線程并發的問題,将userid和年月日作為key,每次簽到請求進來加1,如果得到的值等于1,說明這是當天第一次簽到,寫入資料庫,如果大于1,則直接傳回“已簽到”資訊提醒使用者即可。

作者:燦若繁星

來源:51cto