2016-08-11 80 views
1

我有Silverlight Web應用程序。這個網絡應用程序運行在4臺服務器上,前面有一個NLB。我需要在我的web應用程序中使用SignalR。SignalR - NLB服務器更改和推薦的擴展方式

讓我們思考一下這種情況。 客戶端#1連接到服務器#1,一切正常。他們正在通過一個集線器完美地相互溝通。然後突然NLB將客戶端#1分配給服務器#2。

現在,Connection和Hub會發生什麼?他們將如何溝通? 客戶端#1和服務器#1之間的連接如何設置? PS:我對NLB瞭解不多。也許這是一個愚蠢的問題,但我找不到一個好的解釋。

我的第二個問題是,擴展(Azure,SQL,Redis)中的哪種方式對於可能不是很多客戶端(小於10K)的.NET Silverlight應用程序是最好的?

不是:我在我的應用程序中使用MS SQL,SQL Server。

+1

您需要使用背板。 SignalR提供Redis,SQL Server和Service Bus掛鉤。 –

回答

1

當我看到這個非常翔實的video後,我找到了我的問題的答案。

基本上,當客戶端分配給其他服務器節點時,將自動建立新的連接。舊的連接丟失,但無論如何,如果您正在使用「背板」,則可以通知所有客戶端。因此,這不是問題。

集線器對象也不是問題,因爲它是瞬態對象,即在每個新的單個操作中創建新的集線器對象。因此,這也不是問題。服務器和客戶端之間沒有持久的集線器對象。即使有一臺服務器和一臺客戶機,集線器也將在每次操作中被銷燬和創建。

唯一的問題是,如果您使用的是組,則當客戶端連接到其他服務器時,組信息會丟失。服務器不維護組或組成員的列表。所以在這種情況下,您需要使用數據庫,並且可以從數據庫手動更新。在客戶端和新服務器之間建立新連接時,可以在數據庫中搜索此客戶端,並且如果找到該客戶端的組信息,則可以再次手動重新註冊到該組。

對於選擇背板,沒有最快或最好的方法。在Azure Service Bus,Redis,SQL中,沒有人能說這種方式更快或更好。這真的取決於你的應用程序。如果您已經在使用MS Azure服務,請爲您的Web應用選擇Azure實施。如果您在您的應用程序中使用Redis,請參閱Redis。否則,您可以選擇SQL。正如我所說,他們都差不多。選擇一個最適合您的網絡應用程序。

這些都是從視頻和SignalR的官方網站得到的東西page. 這個網站是最好的SignalR教程和API指南網站之一。強烈建議您閱讀所有章節。