我有一个标准的游戏2!通过JSON与前端通信的应用程序。所有请求都被路由到控制器。现在控制器引入了一些重型计算类。
因此,如果用户请求计算,控制器方法可能需要5秒才能从实际的计算类中获得结果,因为计算是迭代的,需要时间。
这不意味着服务器在这5秒内被阻塞了吗?它不能为任何其他用户服务?当20个人同时使用这个计算工具时,由于队列较长,其他人甚至很难加载由同一台服务器服务的主页。我这样想对吗?有什么可能的解决办法呢?
发布于 2014-06-25 07:16:17
你的假设是正确的。Play 2使用几个线程池,每个线程池都分配给特定的事物。请参阅这里
所以就像你说的,使用默认的配置,假设你同时调用你的计算类,如果超过24人同时访问你的站点,你会播放2个应用程序开始阻塞。
我特别提到了24个人,因为Play的默认线程池配置被设置为每个内核一个线程,最多可达24个线程。看这里获得更多选项。因此,如果阻塞所有24个线程,就会在站点响应性方面出现问题。
有几种解决办法:
发布于 2014-06-25 07:26:32
是也不是。如果您的操作需要很长时间才能完成,那么异步处理它们可能是个好主意(否则您的权限将被阻塞)。
看一看文档。它们解释了您应该做什么(使用承诺,并在必要时创建新的线程来处理计算),以便使您的Action非阻塞。
https://stackoverflow.com/questions/24400354
复制相似问题