Android httpclient如何讓客戶端提示服務器close連接

最近遇到一個問題,就是服務器上的連接數量很多,弄得服務器都崩潰了,但是查看客戶端的代碼,通訊完成後都關閉了輸入輸出流,所以只能在服務器端找原因了,找了半天,服務器沒問題的,沒有辦法,只能去看httpClient的通訊模型了!

通過查看模型,發現了一個問題,就是主動關閉連接的一方會立即斷開連接,而被動斷開連接的一方會過一會斷開(類似於有個等待的時間),所以原因明確了!


服務器端肯定是要主動去斷開的,但是在不明白客戶端要不要斷開的情況下,服務器就不管三七二十一的去斷開,顯然是不行的,那就要想辦法讓客戶端去提示下服務器斷開!


httpClient裏面有個頭信息Connection,Connection表示是否需要持久連接。Connection有三個參數,默認是Keep-Alive

Close:告訴WEB服務器或者代理服務器,在完成本次請求的響應後,斷開連接,不要等待本次連接的後續請求了。Keepalive:告訴WEB服務器或者代理服務器,在完成本次請求的響應後,保持連接,等待本次連接的後續請求。Keep-Alive:如果瀏覽器請求保持連接,則該頭部表明希望 WEB 服務器保持連接多長時間(秒),如Keep-Alive:300。

所以,即使是客戶端去主動關閉,服務器還是要等300s,這個開銷對接入量不大的服務器可能沒什麼影響,接入量大了就崩潰了!


解決方法如下,客戶端發起請求的時候,設置Connection的方式爲Close


HttpGet httpGet = new HttpGet("http://www.baidu.com"); 

  //放入請求頭的內容,必須是以鍵值對的形式,提示後臺請求後可以去關閉連接

httpGet.addHeader("Connection","Close");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章