使用 Redis 的 SignalR 向外延展
警告
本檔不適用於最新版的 SignalR。 看看ASP.NET Core SignalR。
本主題中使用的軟體版本
- Visual Studio 2013
- .NET 4.5
- SignalR 2.4 版
本主題的舊版
如需舊版 SignalR 的相關資訊,請參閱 SignalR 舊版。
問題和批註
請留下您喜歡本教學課程的意見反應,以及我們可以在頁面底部的批註中改善的內容。 如果您有與教學課程不直接相關的問題,您可以將問題張貼至 ASP.NET SignalR 論壇 或 StackOverflow.com。
在本教學課程中,您將使用 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 應用程式。
將下列程式碼新增至 Startup.cs 以設定背板:
public class Startup { public void Configuration(IAppBuilder app) { // Any connection or hub wire up and configuration should go here GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName"); app.MapSignalR(); } }
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 向外延展。 首先,將 Microsoft.AspNet.SignalR.StackExchangeRedis
NuGet 套件新增至您的專案。 在 Visual Studio 的 [ 工具] 功能表中,選取 [NuGet 套件管理員],然後選取 [ 套件管理員主控台]。 在 [Package Manager Console] 視窗中,輸入下列命令:
Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis
接下來,開啟 Startup.cs 檔案。 將下列程式碼新增至 Configuration 方法:
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
app.MapSignalR();
}
}
- 「server」 是執行 Redis 的伺服器名稱。
- 埠 是埠號碼
- 「password」 是您在 redis.conf 檔案中定義的密碼。
- 「AppName」 是任何字串。 SignalR 會使用此名稱建立 Redis pub/sub 通道。
例如:
GlobalHost.DependencyResolver.UseStackExchangeRedis("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 Management Service 是否正在執行。 如果沒有,請啟動服務。 (如果您在 Windows 服務清單中看不到 Web 管理服務,請確定您在新增 IIS 角色時已安裝管理服務。)
根據預設,Web 管理服務會接聽 TCP 埠 8172。 在 Windows 防火牆中,建立新的輸入規則,以允許埠 8172 上的 TCP 流量。 如需詳細資訊,請參閱 設定防火牆規則。 (如果您要在 Azure 上裝載 VM,您可以直接在 Azure 入口網站中執行此動作。請參閱 如何設定虛擬機器的端點。)
現在您已準備好將 Visual Studio 專案從開發電腦部署到伺服器。 在 Solution Explorer中,以滑鼠右鍵按一下解決方案,然後按一下 [發佈]。
如需 Web 部署的詳細檔,請參閱 適用于 Visual Studio 的 Web 部署內容對應和 ASP.NET。
如果您將應用程式部署至兩部伺服器,您可以在個別的瀏覽器視窗中開啟每個實例,並查看它們各自接收來自另一個伺服器的 SignalR 訊息。 當然, (在生產環境中,這兩部伺服器會位於負載平衡器後方。)
如果您想要查看傳送至 Redis 的訊息,您可以使用 使用 Redis 安裝的 redis-cli 用戶端。
redis-cli -a password
SUBSCRIBE ChatApp