1

我在我的长轮询库SignalA中使用basic-http-client。basic-http-client 基于 HttpUrlConnection。在模拟器中运行时,可以打开一个长时间运行的后请求并同时执行另一个后请求。在真实设备上运行我的代码时,第二个 POST 会挂起,直到第一个 POST 完成。它挂在 getResponseCode 函数上。

在模拟器或真实设备上运行有什么区别?如何启用多个 AND 同时请求?

4

1 回答 1

1

引用此处提出的类似问题的解决方案:-

保持连接处于活动状态时使用的连接池HttpURLConnection已损坏,因此它会尝试使用已被服务器关闭的连接。默认情况下,Android 在所有连接上设置 KeepAlive。

System.setProperty("http.keepAlive", "false");是一种为所有连接禁用 KeepAlive 的解决方法,这样您就可以避免连接池中的错误。

conn.setRequestProperty("Connection","Keep-Alive");为这个特定的连接打开 KeepAlive,本质上是相反的System.setProperty("http.keepAlive", "false");

此外,我总是显式调用 connect(),因为它可以清楚地表明您在哪里结束连接设置。我不确定调用这个方法是否是可选的。

System.setProperty("http.keepAlive", "false");
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();
conn.setUseCaches(false); 
conn.setRequestProperty("User-Agent", useragent);
conn.setConnectTimeout(30000);
conn.setDoOutput(true); 
conn.setDoInput(true); 
consumer.sign(conn);

conn.connect();

InputSource is = new InputSource(conn.getInputStream());
于 2013-04-18T13:37:41.073 回答