我有一个需要在服务器之间来回传输数据的应用程序,但现在速度并不令人满意。主要部分是我从服务器接收并解析超过3g的JSON数据(大约200个字符长),并且它执行任务的最快速度大约是5秒,但有时需要足够长的时间来超时(向上) 30秒)。我的服务器是机架式云服务器。
我认为我遵循了最佳做法,但这种速度并非如此。我正在使用AsyncTask和相同的全局HttpClient变量。
你能帮我找到更好的方法吗?
我考虑过这些选项:
我对TCP知之甚少,但似乎开销较少。使用TCP而不是HTTP的优缺点是什么?手机是否适用?
由于
fyi - 一旦我解决了问题,我会接受一个最有帮助的答案。到目前为止,我收到了一些非常好的答案
编辑:我这样做是因为我可以看到下载时的进度,我注意到它长时间保持在0%然后很快就会达到100% - - 根据这些新信息,有没有人有任何想法?我可能会使用三星Epic和Froyo。
答案 0 :(得分:4)
尝试使用GZIP压缩正在发送的数据。请注意代码完整示例,但它应该让您走上正确的道路。
Rejinderi是对的; GSON摇滚。
HttpGet getRequest = new HttpGet(url);
getRequest.addHeader("Accept-Encoding", "gzip");
InputStream instream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
instream = new GZIPInputStream(instream);
}
答案 1 :(得分:2)
TCP只是较低级别的HTTP,如果您确实需要性能,那么TCP就是您应该使用的。 HTTP更容易开发,因为有更多的支持和更容易实现作为开发人员它包装了很多东西,所以你不必自己实现它们。你案件的开销不应该那么多。
至于JSON数据。检查它是否需要很长时间,正常的JSON库java已经很慢了看看这里
http://www.cowtowncoder.com/blog/archives/2009/09/entry_326.html
调试并查看是否是这种情况。如果它的json解析速度我建议你使用gson库。它更干净,易于实施,速度更快。
答案 2 :(得分:1)
听起来您需要对应用程序进行分析,以找出您的瓶颈所在。你说你要发送大约200个字符的数据。这是微不足道的,我不知道压缩或任何严格的数据相关性如何对这么小的数据集产生很大的影响。
我认为您更有可能遇到一些通信问题,可能是尝试为每次传输建立新连接,或者沿着这些线路为您提供所有开销。
分析是解决问题的关键,其他任何事情都是在黑暗中拍摄的。