Jquery 作业完成时向客户端发送通知

Jquery 作业完成时向客户端发送通知,jquery,spring,spring-mvc,long-polling,Jquery,Spring,Spring Mvc,Long Polling,我正在使用SpringMVC编写一个内部web应用程序,用户将通过RESTfulWeb服务提交一组要完成的作业。每个作业只需几秒钟即可完成,但用户可以提交几十个作业。我想要在每个作业完成时通知用户的选项。这将被部署到Tomcat6安装中,这在一定程度上限制了我的选择,因为我将无法访问Servlet3 我以前从来没有写过这样的东西,我也不知道该怎么写。我想我想做一些长时间的轮询,但是,虽然从概念上讲这似乎很容易,但我不确定如何用Spring实现它 我最初的计划是保持连接打开(如果用户设置了接收通知

我正在使用SpringMVC编写一个内部web应用程序,用户将通过RESTfulWeb服务提交一组要完成的作业。每个作业只需几秒钟即可完成,但用户可以提交几十个作业。我想要在每个作业完成时通知用户的选项。这将被部署到Tomcat6安装中,这在一定程度上限制了我的选择,因为我将无法访问Servlet3

我以前从来没有写过这样的东西,我也不知道该怎么写。我想我想做一些长时间的轮询,但是,虽然从概念上讲这似乎很容易,但我不确定如何用Spring实现它

我最初的计划是保持连接打开(如果用户设置了接收通知的选项),在单独的线程中启动作业,作业完成后,通过BlockingQueue向请求线程发送消息,并将消息转发给用户。但是,我认为让连接保持这么长时间可能不是一个好主意。我也看不到jQuery在完成AJAX响应之前开始处理AJAX响应的方法

另一种选择是长轮询。我看到Spring3.2引入了一个新特性来实现上述功能,但1)我不确定这是否依赖于Servlet 3中的异步支持,2)从该示例中我不清楚如何使用它(如果有人能给我指出一个更全面的示例,我将不胜感激),3)可能会出现问题,因为我将使用Spring Security来锁定此应用程序


因此,我可以实现自己的长轮询机制。关于如何处理这个问题,有什么最佳实践吗?我想我可以保留一个singleton ConcurrentMap,其中会话ID作为键,消息作为值保存在BlockingQueue中。工作线程会将消息放入相应的BlockingQueue,当会话中出现消息请求时,它会从阻塞队列中删除,直到发布一些终端消息。但是还有一个问题,如果客户机再也没有回来耗尽消息队列,该怎么办。它怎么会被清理掉?我有一种直觉,认为有更好的方法来实现这一点,但我不确定这是什么。有人能在这里给我一些指导吗?

参考我昨天发布的以下帖子

在回答中,@Werner Vesterå提到

在另一个回复中@Nambari也提到了彗星

看来这对你有用

我也遇到过

它也在做一些类似于推送通知的事情


希望有帮助

WebSocket是一种选择吗?我不确定,但我猜不会。据我所知,Servlet规范还不支持它们。