5

我正在做一个项目,其中“我必须每隔“1毫秒到10毫秒”从“服务器”获取4096字节的数据到服务器。但它“花费了太多时间”,即“大约300ms - 700ms “这会导致我的应用程序丢失数据。

我正在使用下面的片段

HttpClient client = new DefaultHttpClient();
HttpPost request = new HttpPost("http://192.168.1.40/ping");
HttpResponse response = client.execute(request);

HttpResponse 只需要太多时间,即大约 300 毫秒 - 700 毫秒。

我怎样才能更快地得到响应?

除了这个,我还能用什么来更快地从服务器获得响应?

请让我知道任何解决方案或解决方法。

我做过谷歌,通过其他方式DataOutputStreamByteOutputStream但没有使用这个,它也花费了太多时间HttpResponse

帮助将不胜感激。

4

4 回答 4

4

在您可以更快地做出响应之前,您需要调查并了解它们目前​​需要很长时间的原因。粗略地说,可能是:

  • 客户端花费很长时间来创建请求和/或处理结果(似乎不太可能......)
  • 一个缓慢的 android 网络协议栈
  • 您的本地网络(例如 WiFi)或您的电信提供商有问题
  • 拥塞/过载的服务器或服务器端网络,或
  • 在服务器实现中有些微不足道的东西。

执行以下操作:

  • 在传统 PC 上尝试来自网络浏览器的请求,并使用浏览器的网络开发人员的东西来尝试梳理请求是否/为什么需要很长时间......
  • 查看服务器端日志和/或监控请求负载和时间信息
  • 其他建议请

实施 SPDY可能会有所帮助,但不太可能将 500 毫秒左右的响应时间更改为几十毫秒。这个问题似乎比“HTTP 又老又慢”更为根本。同样的推理适用于人们提出的所有其他建议。

于 2012-11-30T04:57:28.760 回答
1

这是不可能的。您每次都在重新创建连接。

您需要与服务器保持持久连接。尝试创建一个持久的 http 连接。

如果这不起作用,您可以尝试发送原始 udp 数据包(或其他任何东西)。这会更难,但会花费更少的时间。

于 2012-11-30T06:52:54.663 回答
0

如果服务器启用 SPDY,@sheldonCooper 的答案是正确的。您还可以添加 Gzip 压缩。它已添加到 GingerBread 之后的所有请求中,但您可以为以前的 SDK 版本添加它:http ://android-developers.blogspot.fr/2011/09/androids-http-clients.html

于 2012-11-30T04:56:53.207 回答
0

使用SPDY协议。这将改善您的响应时间。

我认为在您的情况下,您可以使用 websockets,这样您就不必每次都创建连接,并且每次都可以使用实时连接。

于 2012-11-30T04:46:48.097 回答