zoukankan      html  css  js  c++  java
  • 使用PoolingHttpClientConnectionManager解决友盟(umeng)推送在多线程环境推送失败的问题

    在友盟(umeng)提供的服务端推送的sdk中,使用的是apache提供的httpclient。在单线程化境下,httpclient工作没有问题。但是由于umeng的sdk中并未考虑并发的情况,因此很有可能你会收到这样的error:

    java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
    Make sure to release the connection before allocating another one.

    在apache提供的httpclient类库中,其实已经提供了对线程池管理的类,比如PoolingHttpClientConnectionManager:

    修改umeng sdk中的PushClient.java:

    1.由于默认的HttpClient(4.3.5)构造函数已经过期,可以使用下面的方式重新声明:

    protected HttpClient client = HttpClients.custom().build();

    2. 增加一个PushClient的构造函数:

    public PushClient() {

    ConnectionSocketFactory plainsf = PlainConnectionSocketFactory
    .getSocketFactory();
    LayeredConnectionSocketFactory sslsf = SSLConnectionSocketFactory
    .getSocketFactory();
    Registry<ConnectionSocketFactory> registry = RegistryBuilder
    .<ConnectionSocketFactory>create().register("http", plainsf)
    .register("https", sslsf).build();
    PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(
    registry);
    // 将最大连接数增加
    cm.setMaxTotal(20);
    // 将每个路由基础的连接增加
    cm.setDefaultMaxPerRoute(20);

    client = HttpClients.custom()
    .setConnectionManager(cm).build();
    }

    完成。

    顺便提一下,我不是使用umeng的maven jar包,是使用他们的源代码做集成的。源代码版本的sdk请参看下面的参考联接。

     参考:

    HttpClient Examples:http://hc.apache.org/httpcomponents-client-ga/examples.html

    umeng sdk集成:http://dev.umeng.com/push/ios/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E4%BB%A3%E7%A0%81%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B

  • 相关阅读:
    Python 基础【第三篇】输入和输出
    把linux可执行程序做成一个服务[转]
    linux 下启动程序的时候会显示坏的解释器,或者没有那个文件
    利用GDB进行多线程调试
    两个结构体ifconf和ifreq
    centos系统修改网络配置注意事项
    yum错误:rpmdb: BDB0113 Thread/process 4227/139813012539200 failed: BDB1507 Thread died in Berkeley DB library
    CentOs安装MySql
    周末遐想(计算最长英语单词链)
    单词词频统计(12组)
  • 原文地址:https://www.cnblogs.com/liszt/p/umeng-sdk-with-mutiple-threads.html
Copyright © 2011-2022 走看看