2016-11-08 87 views
0

正如我发现的,字符串中的控制器是单一的Are Spring MVC Controllers Singletons?Spring MVC控制器如何处理多个长的http请求?

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

异步线程我假设 - 不是一个解决方案,因为方法需要结束之前下一个请求将被保留?或不..?

+2

有一个实例的事实并不意味着它不能一次处理多个请求......因此,在下一个请求可以被处理之前不需要结束该方法。 –

回答

0

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

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

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

如果你想要一个异步方法,您coud使用许多选项,如:

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