2017-08-14 73 views
-1

我正在使用hunchentoot會話值讓我的服務器代碼重入。問題在於,根據定義,會話值是在會話期間保留的,即從一次調用從同一個瀏覽器到另一次,而我真正在尋找的是線程特定的重入次數,以便所有值在調用之間消失 - 我想將每次點擊視爲單獨的「從頭開始」事件,即使它們來自同一個會話。很容易讓驅動程序設置爲零,或刪除我的會話值,但我想知道是否有一個「正確」的方式來做到這一點?我沒有看到任何基於線程的模擬hunchentoot:文檔中的會話值。hunchentoot session- v。線程本地化值(ccl)

在此先感謝您提供的任何指導。

+0

歡迎來到Stack Overflow。請花一些時間查看[問題指導](https://stackoverflow.com/help/how-to-ask)。 – ecain

回答

2

如果您希望某個值是「線程特定的」,並且同時對每個請求都是「從頭開始」,那就要求每個請求都必須在全新的線程中分派。根據Hunchentoot文檔,情況並非如此,該文檔說支持兩種模型:單線程任務管理器和每連接線程任務管理器。

如果您的配置是多線程的,那麼在請求處理中綁定的線程特定變量因此可以預期爲每個連接。在單線程的Hunchentoot設置中,它將實際上是全局的,與請求服務線程綁定。

基於線程的模擬hunchentoot:session-value可能不存在,因爲它只會將行爲引入Web應用程序,如果重新配置線程模型或者瀏覽器的請求模式發生更改,則令人驚訝地發生更改。瀏覽器可以使用相同的連接發出多個請求,或關閉請求之間的連接。

要用自定義的每個請求來擴展request對象,我可能會考慮從acceptor開始子類化(如何在文檔中描述)。我的自定義acceptor將有一個process-connection通用函數的自定義方法,該函數將創建擴展/子類request攜帶我想要放入request的額外內容的對象。

另一種方法是有一些全局弱散列,它將request對象綁定爲附加信息的關鍵字。

+0

謝謝。這非常有幫助。其實哈希解決方案是我最終的地方,但它看起來像一個kludge ...我猜是這樣。由於所有對此的調用最終都將通過顯式REST調用來自客戶端,所以我並不擔心不受控制的請求。我只是想在工作之前洗手,而散列解決方案確實很好。謝謝! – jackisquizzical