为什么不安排一个线程每分钟获得一次天气,并将其暴露给JSP,而不是让每个JSP都得到它自己的天气报告?
对于您和雅虎来说,这样做效率更高,JSP只需查找本地对象(几乎是瞬间的),而不必连接到Web服务。
编辑
在这个答案的评论一些新的要求提出解决方案,选择一个不同的方式。
似乎不仅天气不仅不会经常改变,而且对每个用户来说都是一样的,但是网络服务还需要其他数据,比如飞行数据。
飞行数据检索的要求与天气数据的要求非常不同。所以我认为你应该定义几种类型的(远程)数据,并为每个类别选择不同的解决方案 。
至于我会使用一些简单的要求依据:
- 用户喜欢他们的信息及时,他们不喜欢等待存储在Web服务器上的数据
- 的量是有限的
- 远程Web服务具有各种EULA,并且可能不满意来自同一个源的相同数据的200个并发请求(您)
对用户的快速数据访问是最好的通过在本地获取数据来获取信息,无论是暂时的(保存在bean中)还是持久的(本地数据库)。这可以通过定期从远程源请求数据并使用JSP中的缓存数据来完成。这也会让你清楚地知道第三点。
存储在Web服务上的有限数据意味着并非所有内容都可以被缓存。每个用户不同的数据或者可能会在很短时间内发生变化的大型数据集不能被缓存。每隔一分钟左右在美国所有机场的所有航班上加载数据并不是一个好主意。必要时运行特定的Web服务查询可以更好地满足这类请求。
现在的技巧是确定缓存数据何时可行。如果可行,请执行此操作,否则在后台运行Web服务查询。这可以通过呈现JSP 现在并在后台启动Web服务查询来完成。 JSP可以有一个AJAX脚本,用于查询Web服务器是否准备好数据,并在准备就绪时将该数据插入页面。
+1 - 伟大的一点。天气没有那么快变化。 – duffymo 2010-04-11 14:30:37
雅虎天气服务是我们使用的几种服务之一,我们也经常使用其他服务,例如获得航班等的可用性,在这种情况下,我不能安排东西:) – Sudheer 2010-04-11 14:32:47
然后分解请求,您的网站的部分将加载比其他人慢,显示经典搜索动画。您无法对第三方“免费”服务提出要求。如果您正在为航班可用性服务付费,请让他们加强游戏。 – whatnick 2010-04-11 14:35:36