2016-11-08 120 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)進行處理,然後在完成時接收通知。