小编use*_*142的帖子

使用HttpClient在Android中重用SSL会话

我在使用HttpClient在Android上恢复SSL会话时遇到了很多困难.

我每隔90秒轮询一次服务器(仅适用于只有一个功能的工业设备),所以我需要恢复会话,否则数据使用从每小时几KB到最高150-200kB,这是不可持续的.服务器是在Restlet中嵌入Jetty,并且当我使用OpenSSL测试它时支持恢复SSL会话.据我所知.

我正在重用我的HttpClient对象,所以不是这样.Android有一个特定的SSLCertificateSocketFactory,我也尝试过,它似乎也没有用.

有什么我在这里完全失踪的吗?我曾经假设HttpClient会自动执行此操作,我不确定我做错了什么,互联网上的任何人似乎都没有遇到类似的问题.

我通过以下方式设置了httpClient:

    public HttpClient getNewHttpClient(Context context) {
    try {

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
        HttpConnectionParams.setStaleCheckingEnabled(params, false);

        HttpConnectionParams.setConnectionTimeout(params, 4 * 1000);
        HttpConnectionParams.setSoTimeout(params, 5 * 1000);
        HttpConnectionParams.setSocketBufferSize(params, 8192);

        HttpClientParams.setRedirecting(params, false);

        SSLSessionCache sslSession = new SSLSessionCache(context);
        SchemeRegistry registry = new SchemeRegistry();

        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", SSLCertificateSocketFactory.getHttpSocketFactory(10*60*1000, sslSession), 444));
        //registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 444));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DelegateHttpClient(ccm, params);

    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}

private static …
Run Code Online (Sandbox Code Playgroud)

ssl session android httpclient reusability

12
推荐指数
1
解决办法
8985
查看次数

Android上的MQTT Eclipse Paho客户端,断开挂起并永不完成

我在Android应用程序中使用MQTT,使用Eclipse Paho页面上的最新jar.

我通过在QOS为1的情况下发送偶尔发布来手动检查连接,如果在某个超时下没有发送,我断开MQTT并重新连接.当数据连接丢失然后重新获得时我也强制重新连接.

问题是disconnect方法挂起线程并且永远不会完成 - 即使是零或负超时.它应该有30秒的内部超时,但它会超过这个并且永远不会完成.

MqttClient对象需要断开连接,否则它会在后台咀嚼数据.我现在正在做的是分离一个单独的线程来断开MQTT,然后完全创建一个新的MqttClient.它停止使用数据,但这是一个糟糕的解决方案,因为新线程只是挂起.

有任何想法吗?

编辑:进一步调查似乎阻止尝试在第70行停止CommsReceiver:

public void stop() throws IOException {
    synchronized (lifecycle) {
        //@TRACE 850=stopping receiver
        trace.trace(Trace.FINE,850);
        if (running) {
            running = false;
            try {
                //@TRACE 851=stop: wait on lifecycle
                trace.trace(Trace.FINE,851);
                // Wait for the thread to finish.
                lifecycle.wait(); // THREAD HANGS //
            }
            catch (InterruptedException ex) {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

android push mqtt

5
推荐指数
1
解决办法
1431
查看次数

标签 统计

android ×2

httpclient ×1

mqtt ×1

push ×1

reusability ×1

session ×1

ssl ×1