Spring MVC控制器如何处理多个长http请求?

时间:2016-11-08 21:22:53

标签: java spring-mvc controller

正如我发现的,String中的控制器是单例Are Spring MVC Controllers Singletons?

问题是,Spring如何处理多个长时间消耗的请求到同一个映射?例如,当我们想要返回需要长时间计算或连接到其他服务器的模型时,有很多用户向同一个URL发送请求?

我认为异步线程不是解决方案,因为方法需要在下一个请求保持之前结束?或者不..?

1 个答案:

答案 0 :(得分:0)

使用线程池(容器管理)处理请求,因此每个请求都有一个独立的上下文,无论Controller是否为Singleton都无关紧要。

一个重要的事情是,Singleton实例不得在请求之间共享状态以避免意外行为或竞争条件。

线程池容量将定义服务器在同步模型中可以处理的请求数。

如果你想要一种异步方法,你可以使用许多选项,如:

  1. 拥有一个独立的线程池来处理来自容器线程的任务,或者
  2. 使用队列推送任务并使用调度程序处理任务,或
  3. 使用Websockets发出请求并使用(1)或(2)进行处理,然后在完成后接收通知。