Включение автоматических обновлений в веб-приложении с помощью службы SignalR

Завершено XP: 100

веб-приложение, проводящее опросы .

Затем мы переходим от опроса и к приложению, которое отправляет обновления данных (по мере их возникновения) к подключенным клиентам. Эта новая конструкция уменьшает трафик и делает более эффективным пользовательский интерфейс, обновляя только при изменении данных. Три технологии, которые мы используем для доставки этого обновленного решения: Azure Cosmos DB, Azure Functionsи SignalR.

  • Azure Cosmos DB: Когда данные изменяются в базе данных, Azure Cosmos DB предоставляет канал изменений. Поддержка канала изменений в Azure Cosmos DB работает путем прослушивания контейнера базы данных на предмет изменений. Затем он выводит отсортированный список измененных документов в том порядке, в котором они были изменены. Когда ваше приложение отслеживает канал изменений, оно может автоматически реагировать на изменения данных.

  • Функции Azure. Ключевое различие между этой функцией и исходной функцией getStocks заключается в том, что функция теперь активируется на основе изменений данных. В предыдущем упражнении мы активировали нашу функцию на основе запросов от клиента и извлекли все данные через входную привязку Azure Cosmos DB. Использование триггера Azure Cosmos DB автоматически повышает эффективность извлечения данных. Функции Azure имеют привязку, которая выполняет код каждый раз, когда данные обновляются в ленте изменений Azure Cosmos DB. Как только функция начинает прослушивать канал изменений, вы можете работать с подмножеством данных, которое представляет только произошедшие изменения.

  • Azure SignalR. Эта служба обеспечивает 2-путь связи с подключением SignalR к клиенту, прослушивающим трансляции SignalR из приложения "Функции Azure".

SignalR и постоянные подключения

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

SignalR — это абстракция для ряда технологий, позволяющих приложению использовать двустороннее взаимодействие между клиентом и сервером. SignalR автоматически обрабатывает управление подключениями и позволяет одновременно передавать сообщения всем подключенным клиентам, например комнате чата. Вы также можете отправлять сообщения определенным клиентам. Соединение между клиентом и сервером постоянно, в отличие от классического HTTP-подключения, которое повторно устанавливается для каждого взаимодействия.

Ключевым преимуществом абстракции, предоставленной SignalR, является то, как она поддерживает резервные варианты транспорта. Транспорт — это метод обмена данными между клиентом и сервером. Подключения SignalR начинаются со стандартного HTTP-запроса. По мере оценки подключения сервер выбирает наиболее подходящий метод связи (транспорт). При связывании с постоянным подключением к клиенту функция может связаться с отдельными клиентами по запросу, что является основой архитектуры приложения в режиме реального времени. Транспорт выбирается в зависимости от API, доступных на клиенте:

  • HTML 5: для клиентов, поддерживающих HTML 5, транспорт API WebSockets используется по умолчанию.
  • WebSockets: если клиент не поддерживает WebSockets, то SignalR возвращается к событиям, отправляемым сервером (также известным как EventSource).
  • другие технологии: для устаревших клиентов используются длинные опросы Ajax или Forever Frame (только IE), чтобы создать иллюзию двустороннего подключения.

Уровень абстракции, предлагаемый SignalR, предоставляет два преимущества для приложения. Первое преимущество заключается в том, что ваше приложение готово к будущему. Так как веб-интерфейсы развиваются, и API-интерфейсы, превосходящие WebSockets, становятся доступными, ваше приложение не нужно изменять. Вы можете обновить версию SignalR, которая поддерживает любые новые API, и вам не нужно пересмотреть код приложения.

Второе преимущество заключается в том, что SignalR позволяет приложению корректно ухудшаться в зависимости от поддерживаемых технологий клиента. Если не поддерживаются WebSockets, используются события, отправляемые сервером. Если клиент не может обрабатывать события, отправляемые сервером, то он использует долгий опрос Ajax и так далее.

Посмотрим, как использовать SignalR для передачи информации из функции, которая считывает измененный фид Azure Cosmos DB.


Следующий урок: Упражнение. Обеспечение автоматических обновлений в веб-приложении с помощью службы SignalR

Предыдущий Следующая