Java 如何轮询每1秒更新一次的服务器?
我有一个服务器,它返回一个JSON对象,其中包含关于过去一秒钟发生的事情的信息,例如Java 如何轮询每1秒更新一次的服务器?,java,real-time,Java,Real Time,我有一个服务器,它返回一个JSON对象,其中包含关于过去一秒钟发生的事情的信息,例如 { time: 2011-06-08 05:07:33, total: 235324, average: 1233 } 轮询此服务器以便获取每次更新的最佳方式是什么?我猜我不想只轮询服务器,休眠1秒,然后再次轮询(因为轮询可能需要一些时间,导致事情延迟,所以我可能会错过一些更新)。我是否应该改为只睡眠0.5秒,轮询服务器,然后检查我收到的JSON对象是否与我上次收到的JSON具有不同的
{
time: 2011-06-08 05:07:33,
total: 235324,
average: 1233
}
轮询此服务器以便获取每次更新的最佳方式是什么?我猜我不想只轮询服务器,休眠1秒,然后再次轮询(因为轮询可能需要一些时间,导致事情延迟,所以我可能会错过一些更新)。我是否应该改为只睡眠0.5秒,轮询服务器,然后检查我收到的JSON对象是否与我上次收到的JSON具有不同的时间戳
(顺便说一句,我是用Java来做这件事的,尽管我认为语言并不重要。)如果你需要获得每一个更新,服务器应该将更新推送到你那里,而不是向另一个方向
例如,您应该考虑在客户端和服务器之间设置一个流,以便服务器可以向客户端发送事件通知。如果您需要获取每个更新,服务器应该将更新推送到您的手中,而不是向其他方向推送 例如,您应该考虑在客户端和服务器之间设置一个流,以便服务器可以向客户端发送事件通知。您可以使用“阻塞拉”模式(不知道它的真实名称):
缺点是客户端几乎总是处于阻塞状态。这可能不适合所有客户端应用程序很难做到这一点。客户端计算机可能具有较高的资源使用率,因此在任何特定时间都没有时间进行调用。也许您应该研究其他的方法来实现这一点,比如将所有数据排队,并在客户机请求时发送数据。因此,如果客户很忙,并且最终等待了2或3秒,那么他们不会错过任何东西。要做到这一点非常困难。客户端计算机可能具有较高的资源使用率,因此在任何特定时间都没有时间进行调用。也许您应该研究其他的方法来实现这一点,比如将所有数据排队,并在客户机请求时发送数据。因此,如果客户机很忙,并最终等待2或3秒,他们不会错过任何东西。这不是一种非常迂回的推送方法吗?只需在应用程序中注册自己并让它向您推送更新,听起来就容易多了。这样,您就可以创建一些被调用的处理程序,而不必阻塞。这不是一个非常迂回的推送方法吗?只需在应用程序中注册自己并让它向您推送更新,听起来就容易多了。这样,您就可以创建一些被调用的处理程序,而不必阻塞。