【问题标题】:Android http keepalive solution, but is it a permanent one?Android http keepalive 解决方案,但它是永久的吗?
【发布时间】:2012-09-17 18:15:10
【问题描述】:

我有一个搜索按钮,每次按下它都会访问服务器。问题是,如果我连续多次按下它,它会正常工作。但是,如果我等待 5 秒钟,第一次按下将不起作用。它只是没有收到回应。第二次按下将起作用,随后的按钮按下也会起作用,直到我等待一定的时间(约 5 秒)

所以基本上,除非您在 5 秒内不断地寻找新事物,否则您按下的第一个按钮将无济于事。

这个问题解决了

          System.setProperty("http.keepAlive", "false");

但是,我读到这摆脱了持久连接,每次单击该按钮时都必须建立新的 TCP 连接。这速度较慢,但​​不是错误的。

这是一个糟糕的解决方案吗?我读过这并不能真正解决任何问题。希望得到一些帮助,谢谢。

【问题讨论】:

  • 我遇到了类似的问题,但我不知道应该在哪里添加这一行?我的意思是在连接之前,在阅读响应之前..?请帮忙
  • 对不起,我完全不记得了。几年前我问过,从那以后就没有做过android开发。随便玩玩吧

标签: android httpurlconnection keep-alive


【解决方案1】:

你说:

但是,如果我等待 5 秒,第一次按下将不起作用。它只是没有收到响应。

我认为在您的情况下服务器甚至没有收到请求。我认为将 http.keepAlive 设置为 false 是一个很好的解决方法。我花了相当多的时间调查这个问题,很明显这是 Android 库中的一个错误。

原因是服务器不想让所有这些连接保持打开状态,因为它们可能很多,所以它会不时关闭其中的一些。但是,Android 库中使用的连接池并不想接受这一事实,并尝试使用旧的关闭连接。

取消设置 http.keepAlive 是一种变通方法而不是解决方案,但是您确实可以获得可靠的 HTTP 处理,尽管有一些性能成本。

【讨论】:

  • 也许从那以后你找到了更好的解决方案?
  • 我记得我只是使用我在问题中写的修复程序,并且有一段时间没有真正使用 android ;p 抱歉
  • 很好的解释。它帮助了我。
【解决方案2】:

ClientConnectionManager 在内部管理操作的连接,但分发 ManagedClientConnection 的实例。该接口从底层的套接字操作中抽象出来,并提供方便的方法来打开和更新套接字以建立路由。操作符被连接管理器封装并自动调用。

org.apache.http.conn

【讨论】:

  • 感谢您的回答,但是我不确定这是否回答了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
相关资源
最近更新 更多