Android中Okhttp和SPDY协议

  HTTP的一个问题在于每个连接一次只允许一个请求和响应,这就让浏览器或者其他客户端为了并行请求必须生成多个套接字(socket)连接。对客户端来说,这不算什么大问题,但是对服务器来说情况就不一样了,所以需要更新Http协议来解决这个问题。其结果就是SPDY协议,它允许一个套接字连接上发送多个HTTP请求。该协议已成为下一代HTTP事实上的开放标准,但它不会取代http,而是改良了如何通过网络发送请求和相应。

  如果开发者同时开发客户端和服务器端代码,研究一下使用SPDY来代替常规的HTTP/1.1还是值得做的,SPDY能显著降低网络负载,并能提高性能。主流浏览器已经能够很好地支持SPDY,并且已经有多个平台的实现版本了,其中就包括Android。

  如果选择SPDY作为通信协议,建议使用OkHttp,目前已经开源,只要在Gradle中引入,只需要添加Maven依赖

compile 'com.squareup.okhttp:okhttp:1.1.1'
  该第三方库只是一个支持SPDY的改进的HTTP客户端。它内部使用HttpUrlConnection接口,所以从现有代码切换到OkHttp只需要少量工作。

  下面的代码展示了如何在Android中使用OkHttp库:

public class OkHttpExample{
   private final OkHttpClient mOkHttpClient;
   
   public OkHttpExample(){
   mOkHttpClient = new OkHttpClient();
   }
   public String okHttpDemo(URL url) throws IOEception{
   HttpURLConnection urlConnection = mOkHttpClient.open(url);
   InputStream inputStream = null;
   urlConnection.setRequestMethod("GET");
   urlConnection.connect;
   if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK){
   inputStream = urlConnection.getInputStream();
   return readStreamToString(inputStream,urlConnection.getContentLength());
   }
   return null;
  }
  private String readStreamToString(InputStream inputStream,int length)throws IOException{
try{
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
       StringBuilder stringBuilder = new StringBuilder(length);
       char[] buffer = new char[length];
       int charsRead;
       while((charsRead = bufferedReader.read(buffer)) != -1){
       stringBuilder.append(buffer,0,charsRead);
      }
     return stringBuilder.toString();
    }finally{
       inputStream.close();
    }
}


   当创建OkHttpClient新实例时,它会初始化所有的东西,比如连接池和响应缓存。即使是普通的Http请求,该实现也非常快,所以使用它来发送网络请求是个不错的想法。使用OkHttp进行SPDY通信能显著提升网络调用的性能。 
  

你可能感兴趣的:(Android编程总结)