Что такое SignalR?

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

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

Механизм выбора протокола

Ниже приведены шаги, которые предпринимает SignalR при выборе транспортного протокола:

  1. Если браузер - Internet Explorer 8 или ниже, то используется Long Pooling.
  2. Если разрешен JSONP (то есть, параметр jsonp имеет значение true, когда установилось соединение), используется Long Pooling.
  3. Если происходит междоменное соединение (то есть, конечная точка SignalR и веб-страница находятся в разных доменах), то будет применяться WebSocket при следующих условиях:
    • Клиент поддерживает CORS (Cross Origin Resource Sharing). Подробную информацию, о том какие клиенты поддерживают CORS можно получить тут: CORS at caniuse.com.
    • Клиент поддерживает WebSocket.
    • Сервер поддерживает WebSocket.
    Если хотя бы одно из условий не выполняется, то используется Long Pooling.
  4. Если JSONP не сконфигурирован и соединение не междоменное, то будет использоваться WebSocket на сервере и клиенте, в случае поддержки на обоих концах.
  5. Если сервер или клиент не поддерживает WebSocket, будет применяться Server Sent Events, если это возможно.
  6. Если же и Server Sent Events не может быть применен, то произведется попытка задействовать Forever Frame.
  7. Если Forever Frame не сработает, то будет использован Long Pooling.
Контроль за работой протоколов

Чтобы определить, какой протокол использует приложение, нужно включить запись логов хаба и открыть консольное окно в браузере.

Для того чтобы включить запись событий хаба в браузере, нужно добавить следующую команду в клиентский код:

$.connection.myHub.logging = true;
  • В Internet Explorer откройте инструменты разработчика через F12, и откройте вкладку Console.
  • В Chrome консольное окно открывается клавишами Ctrl+Shift+J.

Если включена запись логов, то в консольном окне браузера можно увидеть какой транспорт использует SignalR.

Явное указание транспортного протокола

Определение протокола отнимает некоторое время у ресурсов клиента и сервера. Если возможности клиента известны, то указать протокол можно сразу при установлении соединения с клиентом. Следующий фрагмент кода показывает установление соединения, используя транспортный протокол Long Pooling. Такой код может применяться, если точно известно что клиент не поддерживает другие протоколы.

$.connection.start({ transport: 'longPolling' });

Можно также указать и порядок в котором клиент будет пытаться применять протоколы. Следующий код демонстрирует попытку применения WebSocket, и если она неудачна, то Long Polling.

$.connection.start({ transport: ['webSockets','longPolling'] });

Константы для определения транспортных протоколов такие: webSockets, foreverFrame, serverSentEvents, longPolling.

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

Copyright © CodeHint.ru 2013-2019