2011-05-27 37 views
0

我需要實時將更改推送到應用程序的會話範圍。在會話中的每個用戶在我的應用程序也有類似的結構,以這樣的:如何將數據推送到用戶會話?

session.user = 
{ 
    name = "Foo", 
    mojo = "100" 
}; 

用戶可以修改對方的‘魔力’。例如,如果用戶Foo收到 mojo分,並且他現在有110,我需要更新他的session.user.mojo以反映收到的附加「mojo」。換句話說,我需要修改他的會話結構。

示例2:session 1中的用戶在session 2中收到用戶收到「mojo」的內容。會話2中的session.user.mojo需要更新以反映此更改。

一些信息:

  1. 的inital魔力值從數據庫中抽取並存儲在會話時

  2. 「魔咒」的更新總是發生在用戶登錄。數據庫。存儲在會話中的「Mojo」用於管理用戶權限。

我有什麼選擇?這甚至有可能嗎?我完全不知道如何做這樣的事情。

UPDATE我不想將更新後的值傳遞給用戶(當用戶在頁面之間導航時數據會刷新)。我只想在適當的用戶會話範圍內更改它們。

回答

2

這個答案是ColdFusion 9特有的。

按用戶ID緩存用戶數據(例如cachePut()),並在會話中跟蹤他們的用戶ID。每次更新到mojo都應該檢索緩存中的用戶數據 - 如果存在 - 並在那裏更新。最後,如果這是一個多服務器環境,則在廣播任何變化的用戶ID的機器之間建立消息傳遞到mojo,接收消息的服務器然後更新他們自己的緩存的用戶數據。

您購買的產品限制了活動的數據庫活動的數量,活動性非常好,並使mojo值在全球範圍內可用,這具有可用於用戶會話之外的其他用途的額外好處(例如,另一用戶可以查看他們的個人資料以查看mojo得分)。

1

如果您確實需要更改特定會話中的變量,則沒有內置的方法來執行此操作。也許你可以抽象出邏輯,而不是從Session訪問mojo,總是從DB訪問mojo

更新:爲什麼會話?如何處理Application範圍中的大結構,並將userID或sessionID用作關鍵字,並將mojo作爲值?您還可以存儲時間戳lastUpdated,並刪除未更新的時間段以回收您的記憶。然後,不時更新你的數據庫?或者...如果你擔心性能會更新你的數據庫異步。

+0

如果這就是所謂的,我想是的。基本上,我想確保會話「mojo」總是與數據庫「mojo」同步。「不幸的是,我不認爲從數據庫中獲取mojo是不實際的,因爲會有大量的數據庫命中。現在有什麼」可插拔「的現有解決方案嗎?你能給我任何閱讀材料/指針嗎?我開始了?我沒有運氣與谷歌。也許我在錯誤的條件下搜索。 – Mohamad 2011-05-27 02:17:30

+0

我更新我的問題有點更清楚。 – Mohamad 2011-05-27 02:30:33

+0

根據我的經驗,保持數據最終過期在'應用程序'是棘手的,因爲它是很難寫出一個過期算法,這種算法可以導致在負載下導致OOM錯誤。 – orangepips 2011-05-27 09:23:05

相關問題