如何轮询每1秒更新一次的服务器?

时间:2011-06-09 00:10:01

标签: java real-time

我在http://foobar有一个服务器,它返回一个JSON对象,其中包含过去第二天发生的事情的信息,例如

{
    time: 2011-06-08 05:07:33,
    total: 235324,
    average: 1233
}

调查此服务器的最佳方式是什么,以便我获得每次更新?我猜我不想只是轮询服务器,睡1秒钟,然后再次轮询(因为轮询可能需要一些时间并导致事情延迟,所以我可能会错过一些更新)。我应该做什么而不是像睡眠一样只做0.5秒,轮询服务器,然后检查我收到的JSON对象是否与我收到的最后一个JSON有不同的时间戳?

(顺便说一下,我在Java中这样做,虽然我不认为语言真的很重要。)

2 个答案:

答案 0 :(得分:4)

如果您需要获得每次更新,服务器应该将更新推送给您而不是朝另一个方向发展。

例如,您应该考虑在客户端和服务器之间设置流,以便服务器可以向客户端发送事件通知。

答案 1 :(得分:1)

您可以使用“阻塞拉”模式(不知道它的真实名称):

  1. 客户端民意调查和服务器询问信息
  2. 服务器等待它有新信息(如果信息准备就绪,可能没有时间)
  3. 服务器以信息回复
  4. 转到第1步。
  5. 这种模式的优点是

    1. 通讯保持最低
    2. 新信息可用与您发送之间没有延迟(通过轮询,平均滞后时间为轮询频率的50%)
    3. 缺点是客户端几乎总是处于阻塞状态。这可能不适合所有客户端应用程序