2011-01-25 31 views
2

我应该实现一个Web应用程序,其中用户登录并注册某些事件(在本例中为警报)。当发生警报时,服务器需要将警报推送给所有客户端。使用Jetty延续GWT服务器推送?

目前我在客户端

  • 码头使用

    • GWT在服务器端

    正在实施利用码头延续一个好主意服务器推送?我的要求是:

    • 客户端的数量会变得相当小(< 20),但未来可能会增加
    • 报警必须不会迷路(即如果客户端将下降,那就一定不要错过任何警报)
    • 如果客户端出现故障,需要将其他客户端通知(或者至少管理员应该收到某种通知,例如通过邮件)。
  • 回答

    2

    使用Comet(例如Jetty Continuations)的主要原因是它允许减少轮询频率。换句话说:通过使用客户端的频繁轮询,您可以在没有Comet的情况下实现同样的功能。选择哪种选择取决于您的应用程序的特性 - 取决于您的应用程序,每种选择都可能比其他选项更有效率!

    就你而言,由于当客户端出现故障时需要通知,所以使用频繁轮询很有意义。彗星(长轮询)不适合完成此任务:由于其原理,在客户发送新请求之前可能需要很长时间。接收新请求是服务器知道客户端仍然存在的唯一方式(请记住,Web服务器 - 无论是否Comet都不能向客户端发送请求)。

    1

    您的要求指出,警报不会丢失,意味着比长轮询或频繁轮询更复杂的解决方案。

    您的客户端应该向服务器发送确认消息,因为您的用户可以在报警消息到达后关闭应用程序,他/她可以丢失该报警。 此外,您的用户应该单击一条警报消息来确认服务器。你可以把时间限制承认,如果客户端不发送一个ACK消息,那么你可以假设报警已丢失..

    长轮询确认algortihm将是我的选择,以解决您的问题..