【问题标题】:How Spring MVC controller handle multiple long http requests?Spring MVC 控制器如何处理多个长 http 请求?
【发布时间】:2017-03-22 15:42:08
【问题描述】:

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

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

我认为异步线程不是解决方案,因为方法需要在下一个请求被维护之前结束?还是不..?

【问题讨论】:

  • 只有一个实例并不意味着它不能一次处理多个请求......所以没有方法不需要在处理下一个请求之前结束。跨度>

标签: java spring-mvc controller


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2021-07-09
    • 2016-01-27
    • 1970-01-01
    • 2015-01-02
    • 2015-10-05
    • 2016-07-19
    相关资源
    最近更新 更多