我应该实现一个 Web 应用程序,用户登录并通过该应用程序注册某种事件(在本例中为警报)。当警报发生时,服务器需要将警报推送到所有客户端。
目前我正在使用
- 客户端的 GWT
- 服务器端的码头
使用 Jetty Continuations 实现服务器推送是个好主意吗?我的要求是:
- 客户数量将非常少(<20),但未来可能会增加
- 警报不能丢失(即如果客户端将关闭,它不能错过任何警报)
- 如果客户端出现故障,则需要通知其他客户端(或者至少管理员应该收到某种通知,例如通过邮件)。
我应该实现一个 Web 应用程序,用户登录并通过该应用程序注册某种事件(在本例中为警报)。当警报发生时,服务器需要将警报推送到所有客户端。
目前我正在使用
使用 Jetty Continuations 实现服务器推送是个好主意吗?我的要求是:
使用 Comet(例如 Jetty Continuations)的主要原因是,它可以减少轮询频率。换句话说:您可以在没有 Comet 的情况下通过客户端的频繁轮询来实现相同的目标。选择哪种替代方案取决于您的应用程序的特性 - 取决于此,每个替代方案可能比另一个更有效或更低!
在您的情况下,由于您在客户端出现故障时需要通知,因此使用频繁轮询是有意义的。Comet(长轮询)不太适合此任务:由于其原理,客户端发送新请求可能需要很长时间。接收新请求是服务器知道客户端仍然存在的唯一方法(请记住,Web 服务器——无论是否有 Comet——永远无法向客户端发送请求)。
您的要求表明警报不能丢失,这意味着比长轮询或频繁轮询更复杂的解决方案。
您的客户端应该向服务器发送确认消息,因为您的用户可以在警报消息到达后立即关闭应用程序,他/她可能会丢失该警报。此外,您的用户应单击警报消息以确认服务器。你可以设置一个时间限制来确认,如果客户端没有发送确认消息,那么你可以假设警报已经丢失..
带有确认算法的长轮询将是我解决您问题的选择。