Что такое SignalR?

| Четверг, 15 августа, 2013

Метки: SignalR Комментарии: 0

Постоянные соединения и хабы

SignalR API предоставляет две модели взаимодействия между клиентами и серверами: постоянные соединения (Persistent Connections) и хабы (Hubs).

Постоянное соединение (Persistent Connection) представляет собой конечную точку для отсылки сообщений одному пользователю, группе или большой массе клиентов. Persistent Connection API (в .NET представлен классом PersistentConnection) дает разработчику прямой доступ к сетевому протоколу низкого уровня, который предоставляет SignalR. Использовать эту модель будет особенно удобно тем программистам, которые уже работали с сетевыми API, такими, например, как Windows Communication Foundation.

Хаб является более высокоуровневым средством передачи данных, так как он построен на базе Connection API, и это позволяет клиенту и серверу вызывать методы друг друга напрямую. SignalR выступает здесь в роли диспетчера, волшебным образом стирая границы между компьютерами, так что клиенты вызывают методы сервера, как будто это локальные методы, и наоборот. Модель взаимодействия с помощью хабов будет удобна и понятна разработчикам, которые использовали ранее API удаленных вызовов, типа .NET Remoting. С применеием хабов можно также передавать в методы строготипизированные параметры, тем самым позволяя использовать привязку моделей (model binding).

Архитектура системы

Следующая диаграмма показывает отношения между хабами (Hubs), постоянными соединениями (Persistent Connections), и базовыми технологиями, которые используются в качестве транспорта.

Как работает хаб?

Когда серверный код вызывает метод клиента, то через активный транспортный протокол отправляется пакет данных, который содержит имя метода и его параметры (если параметр является объектом, он сериализуется в JSON). Затем клиент ведет поиск метода в своем коде по присланному имени вызываемого метода, и если находит, то метод выполняется с десериализованными параметрами из присланного пакета.

Вызов метода можно отслеживать в инструментах, типа Fiddler. На картинке ниже изображены данные, когда сервер с SignalR послал вызов метода веб браузеру и это можно увидеть в окне логов Fiddler. Вызов метода updateShape был послан с хаба с именем MoveShareHub.

В этом примере имя хаба идентифицируется параметром H, имя метода параметром M, данные, которые передаются в метод в параметре A. Приложение, которое сгенерировало это сообщение можно построить используя данное руководство.

Выбор модели коммуникации

Большинство приложений предпочтительно должны использовать Hubs API. Connection API нужно использовать при следующих обстоятельствах:

  • Формат передаваемого сообщения необходимо указать явно.
  • Разработчик предпочитает работать с моделью передачи сообщений и диспетчеризации, чем с моделью удаленных вызовов.
  • SignalR внедряется в существующее приложение, которое уже использует модель обмена сообщениями.

Комментарии
Никто еще не оставил здесь комментарий.
Войдите, чтобы написать комментарий , или воспользуйтесь формой ниже.
 

Copyright © CodeHint.ru 2013-2020