12

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

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

可能吗?

4

5 回答 5

4

没那么快,实现好的长轮询也不是那么容易。您提到的方法效果很好,但是存在“线程饥饿”的严重问题

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

Jetty 6 有一个 continue 模式,它巧妙地释放长轮询请求的线程以供实际应用程序逻辑使用。

于 2010-10-29T17:25:27.743 回答
3

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

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

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

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

于 2010-08-27T09:13:16.777 回答
2

这个问题很老了,但仍然没有答案。笔者想在 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 Async Processing failed - only one request processes simultanously。至于现在它工作正常。

我找到了使用 jboss 解决方案的示例:http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html,但是像我一样使用 jboss 不是解决方案。JBoss 太大、太慢且太难开发。

于 2011-12-28T11:08:20.473 回答
1

您现在可以使用奇妙的Atmosphere库来执行此操作:

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

于 2012-04-25T17:34:39.150 回答
0

目前正在考虑 Servlet 3.0 异步支持。如果您希望看到具体的场景,请在SPR-8517下发表评论或观看票证并关注讨论。

于 2012-01-26T22:34:40.250 回答