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
- Visual Studio 2013
- .NET 4.5
- SignalR w wersji 2.4
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.
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.
Zainstaluj usługę Redis i uruchom serwer Redis.
Dodaj następujące pakiety NuGet do aplikacji:
Tworzenie aplikacji SignalR.
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.
W kroku Opcje instalacji wybierz pozycję Plik obrazu (.iso), kliknij przycisk Przeglądaj i przejdź do obrazu ISO instalacji systemu Ubuntu.
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
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.
Uwzględnij również usługę zarządzania (wymienioną w obszarze "Narzędzia do 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
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).
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