使用 Redis 的 SignalR 向外延展

警告

本檔不適用於最新版的 SignalR。 看看ASP.NET Core SignalR

本主題中使用的軟體版本

本主題的舊版

如需舊版 SignalR 的相關資訊,請參閱 SignalR 舊版

問題和批註

請留下您喜歡本教學課程的意見反應,以及我們可以在頁面底部的批註中改善的內容。 如果您有與教學課程不直接相關的問題,您可以將問題張貼至 ASP.NET SignalR 論壇StackOverflow.com

在本教學課程中,您將使用 Redis 將訊息分散到部署于兩個個別 IIS 實例上的 SignalR 應用程式。

Redis 是記憶體內部索引鍵/值存放區。 它也支援具有發佈/訂閱模型的傳訊系統。 SignalR Redis 上架會使用 pub/sub 功能,將訊息轉送至其他伺服器。

此圖顯示從 Redis 伺服器到 V M,然後移至電腦的箭號。一個標示為 [發佈] 的箭號會從 V M 移至 Redis 伺服器。

在本教學課程中,您將使用三部伺服器:

  • 執行 Windows 的兩部伺服器,您將用來部署 SignalR 應用程式。
  • 一部執行 Linux 的伺服器,您將用來執行 Redis。 針對本教學課程中的螢幕擷取畫面,我使用了 Ubuntu 12.04 TLS。

如果您沒有三部實體伺服器可供使用,您可以在 Hyper-V 上建立 VM。 另一個選項是在 Azure 上建立 VM。

雖然本教學課程使用官方 Redis 實作,但 MSOpenTech 也有 Redis 的 Windows 埠 。 設定和設定不同,但步驟則相同。

注意

具有 Redis 的 SignalR 向外延展不支援 Redis 叢集。

概觀

在進入詳細的教學課程之前,以下是您將執行的快速概觀。

  1. 安裝 Redis 並啟動 Redis 伺服器。

  2. 將這些 NuGet 套件新增至您的應用程式:

  3. 建立 SignalR 應用程式。

  4. 將下列程式碼新增至 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。

顯示 [安裝選項] 頁面上 [新增虛擬機器精靈] 的螢幕擷取畫面。已選取從開機 C D D V D ROM 和映射檔案點 i s o 安裝 O S。

安裝 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

顯示 Redis 伺服器主頁面的螢幕擷取畫面。

開啟埠 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 通訊協定。

顯示 [新增角色及功能精靈] 的螢幕擷取畫面。已選取伺服器角色和 WebSocket 通訊協定。

也包含 [管理服務] (列在 [管理工具] 底下) 。

顯示 [新增角色及功能精靈] 的螢幕擷取畫面。已選取 [管理服務]。

安裝 Web Deploy 3.0。 當您執行 IIS 管理員時,它會提示您安裝Microsoft Web Platform,或者您可以下載安裝程式。 在 [平臺安裝程式] 中,搜尋 Web Deploy 並安裝 Web Deploy 3.0

顯示 [Web Platform Installer 4 點 5] 對話方塊的螢幕擷取畫面。已選取 [Web 部署 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

顯示 Redis 視窗中編號清單的螢幕擷取畫面。