使用 Redis 的 SignalR 向外延展 (SignalR 1.x)
作者: Patrick Fletcher
警告
本檔不適用於最新版的 SignalR。 請查看ASP.NET Core SignalR。
在本教學課程中,您將使用 Redis 將訊息分散到部署在兩個個別 IIS 實例上的 SignalR 應用程式。
Redis 是記憶體內部索引鍵/值存放區。 它也支援具有發佈/訂閱模型的傳訊系統。 SignalR Redis 背板會使用 pub/sub 功能,將訊息轉送到其他伺服器。
在本教學課程中,您將使用三部伺服器:
- 執行 Windows 的兩部伺服器,您將用來部署 SignalR 應用程式。
- 執行 Linux 的一部伺服器,您將用來執行 Redis。 在本教學課程中,我使用了 Ubuntu 12.04 TLS 的螢幕擷取畫面。
如果您沒有三部實體伺服器可供使用,您可以在 Hyper-V 上建立 VM。 另一個選項是在 Azure 上建立 VM。
雖然本教學課程使用官方 Redis 實作,但 MSOpenTech 也有 Redis 的 Windows 埠 。 設定和設定不同,但否則步驟相同。
注意
具有 Redis 的 SignalR 向外延展不支援 Redis 叢集。
概觀
在我們進入詳細的教學課程之前,以下是您將執行的快速概觀。
安裝 Redis 並啟動 Redis 伺服器。
將這些 NuGet 套件新增至您的應用程式:
建立 SignalR 應用程式。
將下列程式碼新增至 Global.asax 以設定背板:
protected void Application_Start() { GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName"); RouteTable.Routes.MapHubs(); // ... }
Hyper-V 上的 Ubuntu
使用 Windows Hyper-V,您可以輕鬆地在 Windows Server 上建立 Ubuntu VM。
從 http://www.ubuntu.com 下載 Ubuntu ISO。
在 Hyper-V 中,新增 VM。 在 [ 連線虛擬硬碟] 步驟中,選取 [建立虛擬硬碟]。
在 [ 安裝選項] 步驟中,選取 [映射檔 (.iso) ],按一下 [ 流覽],然後流覽至 Ubuntu 安裝 ISO。
安裝 Redis
請遵循 中的 http://redis.io/download 步驟下載並建置 Redis。
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make
這會在 目錄中建置 Redis 二進位檔 src
。
根據預設,Redis 不需要密碼。 若要設定密碼,請編輯 redis.conf
位於原始程式碼根目錄中的 檔案。 (編輯檔案之前先建立檔案的備份複本!) 將下列指示詞新增至 redis.conf
:
requirepass YourStrongPassword1234
現在啟動 Redis 伺服器:
src/redis-server redis.conf
開啟埠 6379,這是 Redis 接聽的預設埠。 (您可以變更組態檔中的埠號碼。)
建立 SignalR 應用程式
遵循下列其中一個教學課程來建立 SignalR 應用程式:
接下來,我們將修改聊天應用程式以支援 Redis 的向外延展。 首先,將 SignalR.Redis NuGet 套件新增至您的專案。 在 Visual Studio 的 [ 工具 ] 功能表中,選取 [NuGet 套件管理員],然後選取 [ 套件管理員主控台]。 在 [Package Manager Console] 視窗中,輸入下列命令:
Install-Package Microsoft.AspNet.SignalR.Redis
接下來,開啟 Global.asax 檔案。 將下列程式碼新增至 Application_Start 方法:
protected void Application_Start()
{
GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
RouteTable.Routes.MapHubs();
}
- 「server」 是執行 Redis 的伺服器名稱。
- 埠 是埠號碼
- 「password」 是您在 redis.conf 檔案中定義的密碼。
- 「AppName」 是任何字串。 SignalR 會使用此名稱建立 Redis pub/sub 通道。
例如:
GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
"MyStrongPassword1234", "ChatApp");
部署並執行應用程式
準備您的 Windows Server 實例以部署 SignalR 應用程式。
新增 IIS 角色。 包含「應用程式開發」功能,包括 WebSocket 通訊協定。
也包含 [管理工具] ) 底下所列的管理服務 (。
安裝 Web Deploy 3.0。 當您執行 IIS 管理員時,它會提示您安裝Microsoft Web Platform,或者您可以下載安裝程式。 在 [平臺安裝程式] 中,搜尋 Web Deploy 並安裝 Web Deploy 3.0
檢查 Web 管理服務是否正在執行。 如果沒有,請啟動服務。 (如果您在 Windows 服務清單中看不到 Web 管理服務,請確定您在新增 IIS 角色時已安裝管理服務。)
根據預設,Web 管理服務會接聽 TCP 埠 8172。 在 Windows 防火牆中,建立新的輸入規則,以允許埠 8172 上的 TCP 流量。 如需詳細資訊,請參閱 設定防火牆規則。 (如果您要在 Azure 上裝載 VM,您可以在 Azure 入口網站中直接執行此動作。請參閱 如何設定虛擬機器的端點。)
現在您已準備好將 Visual Studio 專案從開發電腦部署到伺服器。 在 Solution Explorer中,以滑鼠右鍵按一下解決方案,然後按一下 [發佈]。
如需 Web 部署的詳細檔,請參閱 適用于 Visual Studio 和 ASP.NET 的 Web 部署內容對應。
如果您將應用程式部署到兩部伺服器,您可以在個別的瀏覽器視窗中開啟每個實例,並查看它們各自接收來自另一部的 SignalR 訊息。 (當然,在生產環境中,這兩部伺服器會位於負載平衡器後方。)
如果您想要查看傳送至 Redis 的訊息,您可以使用 Redis-cli 用戶端,其會與 Redis 一起安裝。
redis-cli -a password
SUBSCRIBE ChatApp