我有一個標準的播放2!通過JSON與前端通信的應用程序。 所有請求都被路由到控制器。現在控制器導入一些重型計算類。玩2!框架多線程問題
因此,如果用戶請求計算,控制器方法可能需要5秒才能從實際計算類中返回結果,因爲計算是迭代計算且需要時間。
這是不是表示服務器在這5秒內被阻塞?它無法爲其他用戶提供服務?是否有20人同時使用這個計算工具,由於排隊很長,其他人甚至可能難以加載由同一服務器提供的主頁... 我是否正確地思考這一問題以及可能的解決方案?
我有一個標準的播放2!通過JSON與前端通信的應用程序。 所有請求都被路由到控制器。現在控制器導入一些重型計算類。玩2!框架多線程問題
因此,如果用戶請求計算,控制器方法可能需要5秒才能從實際計算類中返回結果,因爲計算是迭代計算且需要時間。
這是不是表示服務器在這5秒內被阻塞?它無法爲其他用戶提供服務?是否有20人同時使用這個計算工具,由於排隊很長,其他人甚至可能難以加載由同一服務器提供的主頁... 我是否正確地思考這一問題以及可能的解決方案?
你的假設是正確的。 Play 2使用幾個線程池,每個線程池都分配給特定的事物。請參閱here
因此,就像您所說的,使用默認配置並假設您同時呼叫您的計算課程,如果超過24人同時訪問您的網站,您的Play 2應用程序將開始阻止。
我特別提到了24個人,因爲Play的default thread pool configuration設置爲每個內核1個線程,最多24個線程。 See here以獲取更多選擇。因此,如果您阻止所有24個線程,您將在站點響應方面出現問題。
有幾個解決方案:
是的,沒有。如果您的操作需要花費很長時間才能完成,那麼異步處理它們可能是一個好主意(否則您的權利會被阻止)。
看看documentation。他們解釋你應該做什麼(使用承諾,並在必要時創建新的線程來處理計算),以便使您的操作無阻塞。