2012-11-02 111 views
2

当涉及到web服务响应消息,有多少数据是太多了?Webservices:多少数据太多?

我用Java编写的HTTP Servlet这是我们网络的开放之外。它调用数据库,然后通过防火墙发送JSON消息。我们只为数据说话344kb,不包括数据包头。我不会考虑这个实质性的。我们在iOS和Android平台上都收到了回复,总计往返时间可能在1秒到15秒之间。平均可能> 6。我希望在5秒内稳定地获得这个数据,我正在学习这是相当伟大的。根据我的定时,web服务调用数据库的时间为毫秒。我们直接在防火墙后面连线,但是在互联网前面(因此排除了互联网),并且总共可能有一次往返。

就像一个测试,我已经修剪返回JSON返回只有一行数据(4kb),当然,我看到大幅增加速度......稳步< 1秒,当我们的网络之外。它真的回避了这个问题,当返回的JSON消息在移动设备上消耗的时候有一个最大数据大小,期望是< 5秒?运行wireshark显示我正在以多个数据包的形式提供,我想有很多事情要做。

我也主频客户端收到消息,它需要以使其屏幕......仅仅毫秒的时间的时间。

我讨厌打破我的客户端程序为多个Web服务调用不同的数据,考虑到程序是非常基本的,我不认为它需要多个电话。

您认为如何?责备互联网,只是做一个不错的飞溅/加载屏幕? :)

**编辑:我还忘了补充一点,我会通过SSL **

回答

5

责备移动连接和它们的附加延迟。 它甚至不是下载速度,明确的,而保持恒定的连接和非分块包的可能性。

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

在理想条件下,一个电话可能有一两秒钟的RTT,与您的所有数据。
在不太理想的情况下,您的数据可能写不完到达。

所以,你需要订阅量与频率的平衡幕。
没有人能真正给你比例,但你。

就个人而言,我的建议可能是由开始突破模块中的数据了。
如果你有一点模块化部件,这使得你的应用程序,每个都需要配置数据,或用户数据,分别装入各一个,并在一个松散耦合的方式。

作为一个快速说明,您可能会有一个聊天应用程序,您的消息窗口,在线朋友列表以及PM列表全部相互独立加载。

如果每个初始化为它准备好了,并且每个人都有自己独立的“装入”指示符(进步是好的,但真正的“做这个工作,”会做)。

如果您的应用程序更像是博客卷或一组项目,其中只有少数人可以在屏幕上显示,然后根据每个屏幕的平均数量对其进行逻辑分块。
在一个定时器或成功加载触发下一个异步加载的队列中进行设置,直至得到空回应。

如果您的应用程序更像是一个分析套件,您需要载入成千上万行的统计信息...... 好吧,您可以做的事情并不多,但要确保用户知道它正在工作。 您可以发送带有第一个结果的“总计”字段,并根据您迄今为止加载的唯一行数来标记进度。
或者如果您有白天的统计数据,您可以按天或按周大块,并在酒吧或日历上标记,您现有的套餐有多远。

有没有简单的答案在这里,但我希望有一点帮助,并建议海贼王:

在一个程序,我可以看到,一切都流在,并且将工作当它完成等待5秒,是比3秒钟更容易忍受,它只是一个空白的屏幕,并没有人告诉我一件事,在成品弹出之前。

+0

如果有人对移动设备如何处理数据包和台式机感兴趣,有没有可以转向的文章/书籍?重点放在延迟问题上。当我们告诉他们“这是互联网!!!”时,管理层不喜欢它。 :) – xhermit

+0

是的,我明白了。我讨厌成为那个说“也许我们应该改写这个”的人的两倍。试试这里:http://www.igvita.com/2012/07/19/latency-the-new-web-performance-bottleneck/在这里:http://www.igvita.com/2012/04/04/测量站点速度与导航定时/道德是,虽然你在做什么是正确的(减少请求),但你也需要进入它的理解是延迟是100%不可避免的,每一个RTT会受到伤害,因此使用户界面的响应速度更快,因为转移无法进行。 – Norguard

0

对于移动集成65000个字符在JSON中是优秀的....如果您能够在发送时对GZIP进行JSON,并且在接收端可以对其进行解压,那么应该接收89000个字符。对于更大尺寸的JSON,您应该进行批处理。

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