今天看啥
热点:

使用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();
}

完成。

 

www.bkjia.comtruehttp://www.bkjia.com/Javabc/1284152.htmlTechArticle使用PoolingHttpClientConnectionManager解决友盟(umeng)推送在多线程环境推送失败的问题, 在友盟(umeng)提供的服务端推送的sdk中,使用的是apache提供...

相关文章

    暂无相关文章
相关搜索:

帮客评论

视觉看点