2013-04-07 30 views
0

我目前正在建設一個SignalR應用程序(使用ASP.Net MVC4,在IIS7與SQL Server 2008 R2快遞),供用戶輸入一個大廳,被放入組然後在不同的頁面上進行交互。SignalR 1.01集線器在ASP.Net:跨頁存儲組信息

就是HTML5 LocalStorage爲任何參與者的要求,所以可以存儲在客戶端組的信息。

我對應用程序的設計與SignalR組成員兩個問題:

  1. 什麼是存儲在服務器上組成員的最佳方式?單身變量,具有組和連接ID的數據庫或不同的東西?數據庫會成爲SQL Server Express和大約100-200用戶的問題嗎?

  2. 頁面更改過程中會發生什麼變化並引發火災?我是否必須手動續訂組員成員資格,進行斷開/重新連接火警,如果是,我可以區分這種類型的斷開與用戶離開的好處嗎?

回答

1

(1)如果你打算堅持組信息只爲一個會議,你應該考慮使用集線器/永久連接類的靜態變量來存儲有關組的信息(內存的需求情況而定)。例如,連接ID和組之間的字典/映射。重要的是要注意,在應用程序域重新啓動或Web場中時,靜態不會持久。

爲了避免這種情況,你可以簡單地存儲在數據庫中的組信息,而不是關注在應用程序域重新啓動失去它。

你也應該看到Chat sample in the SignalR solution - 它使用靜態變量來哪個聊天室不同的用戶信息

(2)如果你建立從另一頁在同一應用程序的新連接,那麼連接ID將有所不同。刷新頁面時,斷開連接事件將觸發,並且您將使用不同的ID重新連接。在這些情況下,您需要手動在您的應用中使用會話管理機制將新的連接ID映射到用戶。

+0

感謝您的提示,我發現這非常有建設性的和有益的,所以我並沒有被這招收盤相信,嘆息...... – jank 2013-04-08 12:48:44

+0

這麼一堆這裏計算器失敗者,耍賴編輯答案和複製他人只得到積分。獲得生命。 – 2013-04-09 07:07:50

5
  1. 我使用msopentech.redis。一個非常快速的緩存,同時保存您的數據。 (在google上發現大量信息)您可以使用booksleeve(signalr團隊也使用它)或servicestack.redis來訪問它。這樣你就不必把它放在靜態變量或緩慢的數據庫調用中。

  2. 與同一網站的每個頁面的變化,你會收到一個斷開和連接。 connectionID將會不同,所以你應該使用某種機制將connectionid映射到登錄用戶並堅持。這是如果你想能夠發送個人消息,而不是廣播。

+0

我會檢查參考,謝謝。 – jank 2013-04-08 12:47:25