我听说过HTTP keep-alive但是现在我想打开一个与远程服务器的套接字连接.
现在这个套接字连接是否会永远保持打开状态,或者是否存在与之相关的超时限制,类似于HTTP keep-alive?
所以...我正在为Android制作应用程序.应用程序需要发送和接收实时聊天数据(需要是一个套接字),但它也需要发送命令(这不是客户端在发送内容时知道的).
我需要知道在节省用户电池方面什么是更好的解决方案.
a)每次发送命令时打开和关闭连接,如果打开聊天选项卡,则保持连接不变.
b)始终保持连接不变.
我已经浏览了一下互联网,但得到了不同的答案,有人说保持持久的连接对电池寿命有害,而另一些人则认为不是(例如:"你问是否打开TCP连接会耗尽电池电量- 生活?也许我在这里不过了,但打开连接不应该浪费电池寿命......如果你认为我会想知道你在哪里得到这些信息.这对我来说听起来很奇怪.")
或者,如果有另一种解决方案会更好.我不认为谷歌的C2DM在这种情况下也会非常有用.
基本上,更多的是耗尽电池:持久连接,或者打开和关闭连接,除非聊天标签打开?
谢谢!
我有一个 Android 应用程序使用 Indy 10 TIdHttpServer(Delphi 2006 附带)与 Delphi 2006 Web 服务应用程序进行通信。Delphi 应用程序生成一个大的 XML 文件并为其提供服务。XML 生成可能持续超过 5 分钟。
如果持续时间GenerateXml()超过大约 5 分钟 (*),TIdHTTPResponseInfo.WriteContent如果在 Delphi IDE 中运行,我会检测到错误 10053:
Socket Error # 10053 Software caused connection abort.
Run Code Online (Sandbox Code Playgroud)
然而,在 android 端没有检测到任何内容,并且HttpGet-call 会永远持续。
我的问题是:
1.) 为什么会收到错误 10053 以及如何避免它?看起来像android超时连接,但http.socket.timeout设置为无限。
和
2.) 我能做些什么来检测客户端的此类错误(除了设置超时,该超时必须太大而无用)?我可以在 TIdHttpServer.OnException 中做一些事情吗?
这是我的代码。Android - 下载函数,在 AsyncTask 内运行:
protected static HttpEntity downloadEntity(String url) throws IOException {
HttpClient client = new DefaultHttpClient();
//Check because of Error 10053: but …Run Code Online (Sandbox Code Playgroud)