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");

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