Масштабирование SignalR с помощью Redis

по Майк Уоссон

Warning

Эта документация не относится к последней версии SignalR. Ознакомьтесь с ASP.NET Core SignalR.

Версии программного обеспечения, используемые в этом разделе

Предыдущие версии этого раздела

Сведения о более ранних версиях SignalR см. в статье о старых версияхSignalR.

Вопросы и комментарии

Оставьте отзыв о том, как вы понравится вам в этом учебнике, и что можно улучшить в комментариях в нижней части страницы. Если у вас есть вопросы, не связанные непосредственно с этим руководством, их можно опубликовать на форуме ASP.NET SignalR или StackOverflow.com.

В этом руководстве вы будете использовать Redis для распространения сообщений в приложении SignalR, которое развернуто на двух отдельных экземплярах IIS.

Redis — это хранилище "ключ — значение" в памяти. Она также поддерживает систему обмена сообщениями с моделью публикации и подписки. Для пересылки сообщений на другие серверы в объединительной плате Redis SignalR используется функция Pub/Re-in.

В рамках этого руководства вы будете использовать три сервера:

  • Два сервера под Windows, которые будут использоваться для развертывания приложения SignalR.
  • Один сервер под управлением Linux, который будет использоваться для запуска Redis. Для снимков экрана в этом учебнике я использовал Ubuntu 12,04 TLS.

Если у вас нет трех физических серверов, можно создать виртуальные машины в Hyper-V. Другой вариант — создать виртуальные машины в Azure.

Хотя в этом учебнике используется официальная реализация Redis, в MSOpenTech также есть порт Windows Redis . Установка и настройка различаются, но в противном случае шаги одинаковы.

Note

Масштабирование SignalR с помощью Redis не поддерживает кластеры 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();
        }
    }
    

Ubuntu на Hyper-V

С помощью Windows Hyper-V вы можете легко создать виртуальную машину Ubuntu на Windows Server.

Скачайте ISO-образ Ubuntu с http://www.ubuntu.com.

В Hyper-V добавьте новую виртуальную машину. На шаге Подключить виртуальный жесткий диск выберите создать виртуальный жесткий диск.

На шаге Параметры установки выберите файл образа (. ISO) , нажмите кнопку Обзори перейдите к ISO-образ установки Ubuntu.

Установка 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, а затем выберите консоль диспетчера пакетов. В окне "Консоль диспетчера пакетов" введите следующую команду:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Затем откройте файл 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();
    }
}
  • "Server" — имя сервера, на котором работает Redis.
  • порт — номер порта.
  • Password — это пароль, определенный в файле Redis. conf.
  • AppName — любая строка. SignalR создает канал Pub/Redis с таким именем.

Пример:

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

Развертывание и запуск приложения

Подготовьте экземпляры Windows Server к развертыванию приложения SignalR.

Добавьте роль IIS. Включите функции разработки приложений, включая протокол WebSocket.

Также включите службу управления (указанную в разделе "средства управления").

Установите веб-развертывание 3,0. При запуске диспетчера IIS будет предложено установить веб-платформу Майкрософт, или вы можете скачать установщик. В установщике платформы найдите веб-развертывание и установите веб-развертывание 3,0.

Убедитесь, что служба веб-управления запущена. В противном случае запустите службу. (Если служба веб-управления не отображается в списке служб Windows, убедитесь, что служба управления установлена при добавлении роли IIS.)

По умолчанию служба веб-управления прослушивает порт TCP 8172. В брандмауэре Windows создайте новое правило для входящего трафика, разрешающее TCP-трафик через порт 8172. Дополнительные сведения см. в разделе Настройка правил брандмауэра. (Если вы размещаете виртуальные машины в Azure, это можно сделать непосредственно в портал Azure. См. раздел Настройка конечных точек для виртуальной машины.)

Теперь все готово для развертывания проекта Visual Studio с компьютера разработки на сервере. В обозреватель решений щелкните решение правой кнопкой мыши и выберите пункт опубликовать.

Более подробную документацию по веб-развертыванию см. в разделе веб-развертывание Map Web для Visual Studio и ASP.NET.

При развертывании приложения на двух серверах можно открыть каждый экземпляр в отдельном окне браузера и увидеть, что каждый из них получает сообщения SignalR от другого. (Конечно, в рабочей среде два сервера будут находиться за подсистемой балансировки нагрузки.)

Если вы хотите просмотреть сообщения, отправленные в Redis, можно использовать клиент Redis-CLI , который устанавливается вместе с Redis.

redis-cli -a password
SUBSCRIBE ChatApp