如何让HttpResponse更快地运行?

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毫秒之间。

我该如何更快地获取响应?

除了这个方法,还有什么其他方法可以更快地从服务器获取响应?

我已经做了一些研究,尝试了其他方法,比如使用DataOutputStream和ByteOutputStream,但是没有用,它们花费的时间也比HttpResponse长。


2
什么是ping时间?curl获取相同资源需要多长时间,例如 time curl -i 'http://www.my_site.com' - Kevin
@Kevin,我同意,如果ping时间太长,很少有什么方法可以加快速度。 - Nikolay Kuznetsov
@Kevin 我会检查并告诉你。 - Rahul Baradia
1
有一些代码优化,比如不要每次都重新创建 HttpClientHttpGet。但更好的做法可能是在服务器上缓存数据,这样当您请求数据时,它会返回自上次调用以来的 4K x 毫秒数。如果您确实需要每隔几毫秒访问一次,则使用原始套接字并丢弃所有 HTTP 开销可能会更快。 - Ken Y-N
@Kevin 当我使用 time curl -i 'http://www.my_site.com' 时,它显示了这个实际时间 - 0m0.009秒,用户 - 0m0.004秒,系统 - 0m0.004秒。 - Rahul Baradia
显示剩余4条评论
4个回答

4
在加快响应之前,您需要调查并了解为什么当前响应时间较长。大致而言,可能是以下原因之一:
  • 客户端花费了很长时间来创建请求和/或处理结果(似乎不太可能...)
  • 较慢的Android网络协议堆栈
  • 本地网络(例如WiFi)或电信服务提供商存在问题
  • 拥挤/超载的服务器或服务器端网络,或者
  • 服务器实现中存在消极因素。
建议采取以下措施:
  • 在传统PC上从Web浏览器尝试该请求,并使用浏览器的Web开发人员工具尝试确定请求是否花费了很长时间...
  • 查看服务器日志和/或监视请求负载和定时信息
  • 其他建议请
实施SPDY 可能会 有所帮助,但不太可能将响应时间从500毫秒改变到几十毫秒。问题似乎更基础,而非“HTTP陈旧且缓慢”。对于人们提出的所有其他建议都适用相同的推理。

客户端连接服务器花费了近10毫秒的时间,但在响应时花费了100毫秒到200毫秒的时间。我使用LAN来执行此任务。服务器接收数据并发送给其他部分,并在发送后从服务器中删除数据,因此不会导致服务器过载。服务器的实现是完美的。由于每次建立连接都需要时间,所以它花费了很多时间。现在我正在尝试进行持久连接。但不知道如何做。你能帮助我吗?或者有没有任何解决方案或想法可以提供?谢谢你。 - Rahul Baradia

1

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

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

如果那行不通,您可以尝试发送原始的udp数据包(或其他任何东西)。这会更困难,但需要的时间会更少。


你能给我提供一个持久连接示例或一些代码的链接吗? - Rahul Baradia

0

使用SPDY协议。这将提高您的响应时间。

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


SPDY只能在SSL上运行吗?还是可以在HTTP上使用它?如果我们使用自签名证书会发生什么? - Mutatos
是的,SPDY只能在SSL上运行。我认为只要它在HTTPS上运行,SPDY就可以工作。 - Shamis Shukoor

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接