如何在Spring MVC 3中使用Servlet 3 @WebServlet&async?

我想将servlet 3.0异步支持与spring MVC集成。 就像是:

@RequestMapping("/chat") @WebServlet(name="myServlet", asyncSupported=true) public String getMessage(String userName) { ...... } 

可能吗?

不是那么快,实现良好的长轮询并不容易。 你提到的方法运作良好,但存在严重的“线程饥饿”问题

每个Long轮询将耗尽一个线程,如果您有1000个并发用户,则需要1000个线程来为长轮询请求提供服务(大多数情况下会在客户端浏览器上更新服务器端状态)

Jetty 6有一个继续模式,可以巧妙地释放长轮询请求的线程,以供真正的应用程序逻辑使用。

尚未在Spring Framework 3.x中实现。 请参阅https://jira.springframework.org/browse/SPR-5587和https://jira.springsource.org/browse/SPR-8517

如果你想要的是彗星支持(长轮询ajax)你“可能”尝试CometD( http://cometd.org/documentation/cometd-java/server/services/integration-spring )。 但我警告你,我已经放弃它了,它只是臃肿! (像长轮询这样简单的事情需要几天的配置??!)

我只想在Spring3中实现一些RESTful控制器并自己编程长轮询。 向服务器发出Ajax样式的请求,控制器会保持打开状态,直到服务器有新数据发送到浏览器。 浏览器启动新的长轮询请求以获取后续事件。 要避免连接超时,只需返回使客户端重复请求的虚拟值。

简单易行的方式是大多数时候最好的解决方案。

问题很古老,但仍然没有答案。 作者希望在Spring MVC中提供异步支持,但仍然没有给出解决方案。

如前所述,异步支持请求已提交给spring社区bugtracker,并将在Spring 3.1.0中实现。 这是最近发布的,但根据发布说明“Servlet 3.0支持”计划在3.2.0版本中制作: https : //jira.springsource.org/browse/SEC-1685

我的应用程序需要高效的COMET。 我目前的实现基于这个示例: http : //code.google.com/p/jquery-stream/wiki/EchoExample ,但我有兴趣将其移动到Spring MVC控制器。 至于现在,我刚刚改进了示例并手动注入了spring bean以允许与应用程序的其余部分进行通信。 我遇到了一些问题,在我的问题中描述: Tomcat 7异步处理失败 – 只有一个请求同时处理 。 至于现在它工作正常。

我找到了使用jboss解决方案的例子: http : //docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html ,但是对我来说使用jboss是没有办法解决的。 JBoss太大,太慢,太难开发。

您可以使用梦幻般的Atmosphere图书馆来实现这一目标:

这是一个Spring MVC示例: https : //github.com/ghillert/atmosphere-spring-web-mvc

目前正在考虑Servlet 3.0异步支持。 如果您希望反映特定情况,请在SPR-8517下发表评论或观看故障单并按照讨论进行操作。