zoukankan      html  css  js  c++  java
  • JAVA中使用HTTP 1.1提高基于AXIS 1.4的web service的性能

    HTTP 1.1会在第一次连接的时候进行认证, 而在一定时间内保持连接而不用重新验证. 一般情形下,每个web service请求都会在web service服务端验证, 而验证会消耗很多时间, 因此改进或减少验证的次数, 并且使用HTTP 1.1来保持长时间连接能够极大的提高web service性能.

    JAVA中使用Axis 1.4时,默认使用HTTP 1.0来传输web service请求.因此需要配置其使用HTTP 1.1.

    以下是配置Axis 1.4使用HTTP 1.1的方法:

    1. 配置Axis使用CommonsHTTPSender代替默认的HTTPSender.
    方法可查看apache的wiki: http://wiki.apache.org/ws/FrontPage/Axis/AxisCommonsHTTP

    如果缺乏配置client-config.wsdd的条件(比如没权限碰环境,或者是某个共享环境), 可以换个方式在代码里强制调用:

         EngineConfiguration defaultConfig = EngineConfigurationFactoryFinder.newFactory().getClientEngineConfig(); 
         SimpleProvider config = new SimpleProvider(defaultConfig); 
         config.deployTransport(HTTPTransport.DEFAULT_TRANSPORT_NAME,new CommonsHTTPSender()); 
         ServiceLocator locator = new ServiceLocator(config);

    2. 使locator静态化: 
             ServiceLocator必须只实例化一次. 然后在所有stub中共用. 之所以如此是因为ServiceLocator管理着http connection的连接池, 它通过CommonsHTTPSender的引用管理着MultiThreadedHttpConnectionManager.

    3. 在每个请求(stub)中都发送web service的用户名和密码. 默认情况下axis不会在每个请求初始的时候发送用户名密码, 此时服务器会返回401标志(unauthorized error), 而401标志会要求提供用户名密码然后重做登陆验证, 因此为了拒绝出现401登陆的情形, 每次都应该主动提供用户名和密码.在代码中可以这么写:

         Hashtable headers = new Hashtable(); 
         headers.put(HTTPConstants.HEADER_AUTHORIZATION, "Basic " + Base64.encode(username + ":" + password).getBytes()));
         stub._setProperty(HTTPConstants.REQUEST_HEADERS, headers);

    或者:

         System.setProperty("httpclient.authentication.preemptive", "true"); 
         然后 
         stubServicePort._setProperty(Call.USERNAME_PROPERTY, username); 
         stubServicePort._setProperty(Call.PASSWORD_PROPERTY, password);

    本质上是一样的, 后者只是通过调节asix中包含的httpclient包来达到目的而已.

    以上代码表示在每次都在SOAP头部中包含Basic验证的Base64加密的用户名:密码的字符串.也因此推荐对web service使用https连接(如果是内网就不必了), 当然这个本来也是要在网络中传递的, 与是否使用了这个方案无关.

    实际的效果表明这个方案很有效, 我的案例是从每次6-7秒(大部分是登陆验证时间, 而这个验证的方法是别人维护的)降到了0.5秒.

  • 相关阅读:
    MongoDB安装
    前端构建工具gulp入门教程
    限制input输入类型(多种方法实现)
    【E20200105-1】Centos 7.x 下vsftpd配置文件常用配置详解
    【E20200102-1】centos 7 下vsftp的安装和配置
    【E20200101-1】Centos 7.x 关闭防火墙(firewall)和SELinux
    Linux下如何修改用户默认目录
    linux给普通用户增加ssh权限
    在IIS7中应用Application Request Routing配置反向代理
    vmware相关服务默认禁用 修改服务弹出服务拒绝访问解决办法
  • 原文地址:https://www.cnblogs.com/qqzy168/p/3193585.html
Copyright © 2011-2022 走看看