Webservices:有多少数据太多了?

时间:2012-11-02 17:20:48

标签: json web-services networking mobile

对于webservices响应消息,有多少数据太多了?

我有一个用Java编写的HTTP servlet,它在我们的网络之外打开。它调用数据库,然后通过防火墙发回JSON消息。我们只是为了数据而讨论344kb,不包括数据包标题。我不认为这很重要。我们在iOS和Android平台上都收到了回复,总往返时间可能是1秒到15秒。平均值可能>我想在5秒内稳定地得到这个,我知道这是非常壮观的。根据我的时间,对数据库的webservice调用是毫秒。我们直接在防火墙后面,但在互联网面前(因此排除了互联网),并且已经看到了可能一秒钟的总往返。

正如测试一样,我已经修剪了返回JSON以仅返回1行数据(4kb),当然,我看到速度大幅增加......稳定地<在我们的网络之外1秒。这确实引出了一个问题,当返回JSON消息时,是否存在最大数据大小,以便在预期为< 5秒?运行wireshark告诉我这是以多个数据包的形式发送的,我想它有很多功能。

我还计算了客户端收到消息的时间以及在屏幕上呈现消息所需的时间......仅仅几毫秒。

我讨厌将我的客户端程序分解为针对不同数据的多个webservice调用,考虑到程序非常基本,我认为它不需要多次调用。

你怎么看?责备互联网,只是做一个漂亮的启动/加载屏幕? :)

**编辑:我也忘了补充说我正在通过SSL **

2 个答案:

答案 0 :(得分:5)

归咎于移动连接及其增加的延迟。 它甚至不是下载速度,而是保持连续连接的可能性,以及非分块数据包。

可悲的是,你不会在这里找到一个“正确”的答案。

在完美条件下,手机的RTT可能是一秒或两秒,包含您的所有数据 在不太理想的情况下,您的数据可能永远不会到达。

因此,您需要订阅权重与频率的平衡行为 除了你,没有人能真正给你这个比例。

就个人而言,我的建议可能是开始按模块分解数据 如果你有很少的模块化小部件组成你的应用程序,每个需要配置数据或用户数据,分别加载每个,并以松散耦合的方式。

作为一个快速说明,您可能有一个聊天应用程序,其中您的消息窗口,在线朋友列表和PM列表都彼此独立加载。

如果每个都准备好初始化,并且每个都有自己独立的“加载”指示符(进度很好,但真的是“正在处理它”)。

如果您的应用更像是博客卷或一组项目,屏幕上只有少数几个,那么根据每个屏幕的平均数量进行逻辑分块。
在计时器或成功加载触发下一次异步加载的队列中设置它,直到您得到空响应。

如果您的应用更像分析套件,那么您需要加载数千行统计数据... 嗯,你可以做的不是很多,但要确保用户知道它正在工作。 您可以使用第一个结果发送“总计”字段,并根据您到目前为止加载的唯一行数标记您的进度。
或者,如果您在白天有统计数据,则可以按天或按周计算,并在条形图或日历上标记,当前可用集合的返回距离。

这里没有简单的答案,但希望有所帮助,还有一条建议:

在一个程序中等待5秒,我可以看到所有内容都在流入,并且在完成后工作,比3秒钟更可忍受,它只是一个空白屏幕而没有人告诉我一件事,在成品弹出之前起来。

答案 1 :(得分:0)

对于移动集成,JSON中65000个字符的数量非常好....如果您能够在发送时GZIP JSON,而在接收方,如果您能够解压缩它,则应该接收最多89000个字符。对于更大尺寸的JSON,您应该进行批处理。

对于更多字符,问题来自带宽。如果互联网带宽变慢,那么您可能无法接收数据(数据丢失)。