最近在做乙個android應用,客戶端需要向伺服器端(jsp後台)提交一些資訊,並得到伺服器的反饋,再顯示到介面上。
問題就出現在服務端接受到資料,插入資料庫形成訂單,處理完後返回成功與否的反饋資訊給客戶端時候。由於客戶端主動關閉網路或由於訊號不好,導致網路被迫關閉。
客戶端無法接受到伺服器反饋,而產生超時異常(此時servlet竟然不報異常),此時反饋給android客戶端的則是此操作失敗;然而後台卻由於剛剛資料插入操作成功而生成訂單,管理人員在檢視的時候發現訂單存在則預設為客戶操作成功。
如何避免以上情況呢?諮詢過一些人:
1、有人說拉長客戶端的超時時間,以降低概率;(治標不治本)
2、有人說做驗證,客戶端收到反饋後,再通知服務端,那麼服務端才插入資料進資料庫,其實這個並沒解決問題,如果客戶端在接受到反饋後網路就斷開了,那通知伺服器這一步就達不成,導致客戶端以為自己下單成功,而服務端卻沒生成訂單。(這種反饋機制是不完善的,只是迴圈走鋼絲而已)
3、有人說做快取,當網路再次通暢的時候,伺服器的訂單才正式生成。(這就破壞了訂單的及時性,萬一一星期後才開網路,這就導致了訂單延遲了一星期)
4、各位csdn的大大意見。
對於此類問題,小弟的個人看法是:
1、servlet此時應該報異常,但是我就是沒發現有異常,應該是學藝不精,不知道怎麼catch這個異常,求各位不吝賜教。
2、http的機制本身就存在這種弊端,得走別的協議才能解決以上情況。(此為猜測,沒有理論依據)不過本人覺得不太可能http存在弊端,因為據了解http是有反饋機制來處理這種情況的,但是不知道為啥servlet沒報錯。
求各位csdn的大大幫忙啊!
服務端與客戶端互動
搭建伺服器 伺服器端 using system.net.sockets using system.net using system.io using system.text namespace sockerservice endpoint point new ipendpoint ipaddress...
客戶端與服務端互動流程
發起連線請求與服務端建立連線,zk集群分配乙個session id給客戶端 連線建立成功後session被建立 客戶端週期性傳送心跳保持session的有效性,若zk集群在指定時間內 session timeout 沒收到心跳則認為session失效 session建立的臨時節點以及watches都...
redis客戶端與服務端互動過程
redis是一種基於客戶端 服務端模型以及請求 響應協議的tcp服務 客戶端 當乙個連線建立後 1 客戶端向服務端傳送乙個查詢請求,並監聽socket返回,通常是以阻塞模式,等待服務端響應 2 服務端處理命令,並將結果返回給客戶端。服務端 1 首先,客戶端 socket 會被設定為非阻塞模式,因為 ...