我有一个标准游戏2!通过JSON与前端通信的应用程序。 所有请求都路由到控制器。现在控制器导入了一些重型计算类。
因此,如果用户请求计算,控制器方法可能需要5秒才能从实际计算类中获取结果,因为计算是迭代的并且需要时间。
这是不是意味着服务器在这5秒内被阻止了?它无法为任何其他用户提供服务?是否有20人同时使用此计算工具,由于队列较长,其他人甚至可能难以加载由同一服务器提供的主页... 我是否正确的思考方式和可能的解决方案是什么?
答案 0 :(得分:1)
您的假设是正确的。 Play 2使用一些线程池,每个线程池分配给特定的东西。见here
就像你说的那样,使用默认配置并假设你同步调用你的计算类,如果超过24人同时访问你的网站,你的Play 2应用程序将开始阻止。
我特别提到了24个人,因为Play default thread pool configuration被设置为每个核心1个线程,最多24个线程。 See here了解更多选项。因此,如果您阻止所有24个线程,您将开始在站点响应方面遇到问题。
有一些解决方案:
答案 1 :(得分:1)
是和否。如果你有需要很长时间才能完成的动作,那么异步处理它们可能是一个好主意(否则你的权利,它们会阻止)。
查看documentation。他们解释了你应该做什么(使用promise并在必要时创建新的线程来处理计算),以使你的Action无阻塞。