SignalR — skalowanie w poziomie z użyciem pamięci podręcznej Redis

Ostrzeżenie

Ta dokumentacja nie dotyczy najnowszej wersji usługi SignalR. Przyjrzyj się ASP.NET Core SignalR.

Wersje oprogramowania używane w tym temacie

Poprzednie wersje tego tematu

Aby uzyskać informacje o wcześniejszych wersjach usługi SignalR, zobacz SignalR Starsze wersje.

Pytania i komentarze

Przekaż opinię na temat tego, jak ci się podobał ten samouczek i co możemy ulepszyć w komentarzach w dolnej części strony. Jeśli masz pytania, które nie są bezpośrednio związane z tym samouczkiem, możesz opublikować je na forum ASP.NET SignalR lub StackOverflow.com.

W tym samouczku użyjesz usługi Redis do dystrybucji komunikatów w aplikacji SignalR wdrożonej w dwóch oddzielnych wystąpieniach usług IIS.

Redis to magazyn par klucz-wartość w pamięci. Obsługuje również system obsługi komunikatów z modelem publikowania/subskrybowania. Backplan usługi SignalR Redis używa funkcji pub/sub do przekazywania komunikatów do innych serwerów.

Diagram przedstawiający strzałki przechodzące z serwera Redis do maszyn wirtualnych, a następnie do komputerów. Jedna strzałka z etykietą Publikowanie przechodzi z maszyn wirtualnych do serwera Redis.

Na potrzeby tego samouczka będziesz używać trzech serwerów:

  • Dwa serwery z systemem Windows, których użyjesz do wdrożenia aplikacji SignalR.
  • Jeden serwer z systemem Linux, który będzie używany do uruchamiania usługi Redis. Na potrzeby zrzutów ekranu w tym samouczku użyto protokołu TLS w systemie Ubuntu 12.04.

Jeśli nie masz trzech serwerów fizycznych do użycia, możesz utworzyć maszyny wirtualne w funkcji Hyper-V. Inną opcją jest utworzenie maszyn wirtualnych na platformie Azure.

Mimo że w tym samouczku jest używana oficjalna implementacja usługi Redis, istnieje również port usługi Redis systemu Windows z witryny MSOpenTech. Konfiguracja i konfiguracja są różne, ale w przeciwnym razie kroki są takie same.

Uwaga

Usługa SignalR skalowana w poziomie z usługą Redis nie obsługuje klastrów Redis.

Omówienie

Zanim przejdziemy do szczegółowego samouczka, poniżej przedstawiono krótkie omówienie tego, co zrobisz.

  1. Zainstaluj usługę Redis i uruchom serwer Redis.

  2. Dodaj następujące pakiety NuGet do aplikacji:

  3. Tworzenie aplikacji SignalR.

  4. Dodaj następujący kod do pliku Startup.cs, aby skonfigurować płaszczyznę wsteczną:

    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();
        }
    }
    

System Ubuntu w funkcji Hyper-V

Za pomocą funkcji Hyper-V systemu Windows można łatwo utworzyć maszynę wirtualną z systemem Ubuntu w systemie Windows Server.

Pobierz plik ISO systemu Ubuntu z witryny http://www.ubuntu.com.

W funkcji Hyper-V dodaj nową maszynę wirtualną. W kroku Łączenie wirtualnego dysku twardego wybierz pozycję Utwórz wirtualny dysk twardy.

Zrzut ekranu przedstawiający okno dialogowe Kreator nowej maszyny wirtualnej. Nawiąż połączenie z wirtualnym dyskiem twardym i wybierz pozycję Utwórz wirtualny dysk twardy.

W kroku Opcje instalacji wybierz pozycję Plik obrazu (.iso), kliknij przycisk Przeglądaj i przejdź do obrazu ISO instalacji systemu Ubuntu.

Zrzut ekranu przedstawiający Kreatora nowej maszyny wirtualnej na stronie Opcje instalacji. Zainstaluj system operacyjny z rozruchu C D V D ROM i wybrano plik obrazu dot i s o.

Instalowanie usługi Redis

Wykonaj kroki opisane w http://redis.io/download temacie , aby pobrać i skompilować usługę 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

Spowoduje to skompilowanie plików binarnych usługi Redis w src katalogu .

Domyślnie usługa Redis nie wymaga hasła. Aby ustawić hasło, zmodyfikuj redis.conf plik znajdujący się w katalogu głównym kodu źródłowego. (Utwórz kopię zapasową pliku przed jego edycją!) Dodaj następującą dyrektywę do redis.conf:

requirepass YourStrongPassword1234

Teraz uruchom serwer Redis:

src/redis-server redis.conf

Zrzut ekranu przedstawiający stronę główną serwera Redis.

Otwórz port 6379, który jest domyślnym portem, na którym nasłuchuje usługa Redis. (Numer portu można zmienić w pliku konfiguracji).

Tworzenie aplikacji SignalR

Utwórz aplikację SignalR, wykonując jeden z następujących samouczków:

Następnie zmodyfikujemy aplikację czatu, aby obsługiwała skalowanie w poziomie za pomocą usługi Redis. Najpierw dodaj Microsoft.AspNet.SignalR.StackExchangeRedis pakiet NuGet do projektu. W programie Visual Studio z menu Narzędzia wybierz pozycję Menedżer pakietów NuGet, a następnie wybierz pozycję Konsola menedżera pakietów. W oknie Konsola menedżera pakietów wprowadź następujące polecenie:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Następnie otwórz plik Startup.cs. Dodaj następujący kod do metody 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();
    }
}
  • "serwer" to nazwa serwera z uruchomioną usługą Redis.
  • port jest numerem portu
  • "password" to hasło zdefiniowane w pliku redis.conf.
  • Ciąg "AppName" to dowolny ciąg. Usługa SignalR tworzy kanał pub/sub usługi Redis o tej nazwie.

Na przykład:

GlobalHost.DependencyResolver.UseStackExchangeRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Wdrażanie i uruchamianie aplikacji

Przygotuj wystąpienia systemu Windows Server do wdrożenia aplikacji SignalR.

Dodaj rolę usług IIS. Obejmują funkcje tworzenia aplikacji, w tym protokół WebSocket.

Zrzut ekranu przedstawiający Kreatora dodawania ról i funkcji. Wybrano role serwera i protokół WebSocket.

Uwzględnij również usługę zarządzania (wymienioną w obszarze "Narzędzia do zarządzania").

Zrzut ekranu przedstawiający Kreatora dodawania ról i funkcji. Wybrano usługę zarządzania.

Zainstaluj narzędzie Web Deploy 3.0. Po uruchomieniu Menedżera usług IIS zostanie wyświetlony monit o zainstalowanie Platforma Microsoft Web lub pobranie instalatora. W Instalatorze platformy wyszukaj pozycję Web Deploy i zainstaluj narzędzie Web Deploy 3.0

Zrzut ekranu przedstawiający okno dialogowe Instalator platformy internetowej 4 punkt 5. Wybrano narzędzie Web Deploy 3 punkt 0.

Sprawdź, czy usługa zarządzania siecią Web jest uruchomiona. Jeśli nie jest, uruchom tę usługę. (Jeśli usługa zarządzania siecią Web nie jest widoczna na liście usług systemu Windows, upewnij się, że usługa zarządzania została zainstalowana po dodaniu roli usług IIS).

Domyślnie usługa zarządzania siecią Web nasłuchuje na porcie TCP 8172. W Zaporze systemu Windows utwórz nową regułę ruchu przychodzącego, aby zezwolić na ruch TCP na porcie 8172. Aby uzyskać więcej informacji, zobacz Konfigurowanie reguł zapory. (Jeśli hostujesz maszyny wirtualne na platformie Azure, możesz to zrobić bezpośrednio w Azure Portal. Zobacz How to Set Up Endpoints to a Virtual Machine (Jak skonfigurować punkty końcowe na maszynie wirtualnej).

Teraz możesz przystąpić do wdrażania projektu programu Visual Studio z komputera dewelopera na serwerze. W Eksplorator rozwiązań kliknij rozwiązanie prawym przyciskiem myszy i kliknij polecenie Publikuj.

Aby uzyskać bardziej szczegółową dokumentację dotyczącą wdrażania w Internecie, zobacz Web Deployment Content Map for Visual Studio and ASP.NET (Mapa zawartości wdrażania w Internecie dla programu Visual Studio i ASP.NET).

W przypadku wdrożenia aplikacji na dwóch serwerach można otworzyć każde wystąpienie w osobnym oknie przeglądarki i zobaczyć, że każdy z nich odbiera komunikaty usługi SignalR od drugiego. (Oczywiście w środowisku produkcyjnym dwa serwery znajdują się za modułem równoważenia obciążenia).

Zrzut ekranu przedstawiający dwa otwarte okna przeglądarki z wyświetloną aplikacją wdrożona na dwóch serwerach.

Jeśli chcesz zobaczyć komunikaty wysyłane do usługi Redis, możesz użyć klienta redis-cli , który jest instalowany z usługą Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Zrzut ekranu przedstawiający listę numerowaną w oknie usługi Redis.