我在我的longpolling库basic-http-client中使用SignalA。 basic-http-client基于HttpUrlConnection。在模拟器中运行时,可以打开一个长运行后请求并同时执行另一个请求。 在真实设备上运行我的代码时,第二个POST将挂起,直到第一个完成。它挂在getResponseCode函数上。
在模拟器或真实设备上运行之间的区别是什么? 如何启用多个AND同时请求?
答案 0 :(得分:1)
来自类似问题的引用解决方案here: -
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());