2015-04-01 82 views
0

我正在爲少量用戶編寫一個小型的Grails應用程序(最多10個)。它將託管在Heroku免費託管(1 dyno = 512 MB RAM)。Grails中Ajax請求的單用戶控制器實例?

該應用程序將有一個用戶表單,該表單在提交時會觸發一個Ajax請求,該請求會在控制器中產生一個線程(默認提交動作是通過preventDefault()來阻止的,因爲任務非常耗時,Heroku的超時約30秒)。

例如,線程從外部api/url獲取項目列表,控制器將有一個實例變量say itemFetched。用戶表單的網頁將包含一個進度小部件,它將定期顯示此itemFetched的值。

usera啓動一個線程,當它在後臺運行時,用戶在離開該頁面並再次點擊該url時將看到itemFetched的狀態。

如何創建一個「每用戶」控制器(只要線程通過Ajax線程產生),而不是每個HTTP請求(即原型範圍)?

+0

您是否考慮過使用會話作用域服務?這將允許每個http會話的服務實例。幾乎你要找的東西。 – 2015-04-01 01:31:13

+0

@JoshuaMoore我認爲如果用戶離開頁面並且再次回來,會話範圍服務將不起作用,因爲它會啓動一個新的「會話」。 – rahulserver 2015-04-01 01:33:19

+0

不,這正是會話的目的 - 維護請求之間的狀態。 – 2015-04-01 02:37:18

回答

1

在這種特殊情況下,會話範圍服務將是一個完美的選擇。您可以在documentation中閱讀更多關於它的信息。

通過使您的服務會話範圍化,每個HTTP會話都將擁有自己的服務實例,並且您可以在給定會話中的請求之間維護狀態。

+0

我們可以直接通過注入控制器來使用會話作用域服務嗎?或者我們是否需要使用會話代理?我面臨的問題,因爲我在這裏概述http://stackoverflow.com/questions/29411774/grails-unable-to-inject-session-scoped-service-to-controller – rahulserver 2015-04-02 11:45:52