Введение в ASP.NET Core SignalR
ASP.NET Core SignalR — это библиотека с открытым исходным кодом. Которая позволяет создавать приложения в реальном времени по настоящему. Т.е. не по принципу запрос-ответ, а независимо, когда сервер решает сам когда ответь и не ждет клиента. Например сервер- сервер-клиент или клиент-сервер-сервер. Нет очередности два актора общаются независимо.
Такое поведение похоже на толстый клиент у которого нет сервер и который работает на нашем пк без подключения к интернету. Поэтому signalR насколько перспективная технологий. Сайт работающий с использованием сигналР я бы назвал web 3.0.
Почему не везде используют SignalR
Когда я первый раз понял мощь технологии. Я подумал, а почему сайты не используют signalr? Ведь это так круто, всё в реальном времени. Простой ответ — цена. К сожалению, для рядовых сайтов такая технология будет дорогой. Например максимальное число соединений в теории 65534, для Windows по умолчанию стоит 5000 свободных соединений. Например, если посещаемость нашего сайта 1 млн уникальных пользователей в день, то нам нужно арендовать кластер из 15.5 серверов или виртуальных машин. С другой стороны если ваша посещаемость 1 млн вы уже успешный стартап и скорее всего можете позволить себе 15 виртуальных машин 🙂
Где использовать SignalR
100% необходимость использовать SignalR нужна там где скорость визуализации данных критична. Например ПО брокера на бирже. Или АСУ ТП (Автоматизированная система управления технологическим процессом), чаты и т.п. Вообще я бы не исключал данную технологию и для простых небольших сайтов у нас же 65 тыс соединений это всё равно неплохо.
Через SignalR можно передавать файлы. В одном из проектов мы например передавали звук (в виде байтов) каждые 100 мс небольшими порциями. Собственно байтами можно передавать что угодно в том числе и файлы (но для этого лучше использовать обычный POST запрос, браузер также передаст файл частями на сервер).
Зачем Использовать .Net Signalr если есть WebSocket
Signalr работает с android, iOS, можно использовать в консольных приложениях, десктопных приложениям и в WPF. Во вторых Signalr это обертка над веб-сокетом, поэтому если ваш браузер не поддерживает веб-сокеты или пользователь отключил его, то singlar все равно будет имитировать работу в реальном времени через механизм передачи данных Long Polling.
Какие способы передачи данных в реальном времени поддерживает Signalr Core.
- WebSocket — протокол (rfc7118) поддерживающий двухстороннюю передачу данных в реальном времени. Доступен почти по всех современных браузерах. И поддерживается некоторыми приложениями ориентированными на веб.
- Server-Sent Events — по названию можно сказать что сервер передает данные, а клиент слушает данные с сервера, работает по протоколу http.
- Long polling — способ когда клиент, например каждые 100 мс. долбит сервер сообщениями. Возможно вы неосознанно реализовывали данный способ. Когда на JavaScript заворачивали функцию в setInterval()
// Пример Long polling с использованием JQuery function fetchdata(){ $.ajax({ url: 'fetch_details.php', type: 'post', success: function(data){ // Perform operation on return value alert(data); }, complete:function(data){ setTimeout(fetchdata,5000); } }); } $(document).ready(function(){ setTimeout(fetchdata,5000); });
Поддержка WebSocket в браузерах
- Microsoft Internet Explorer 8, 9, 10, 11. Modern, Desktop, Mobile
- Mozilla Firefox: на Windows на Mac ОС
- Google Chrome: Windows и на Mac ОС
- Safari: на Windows и на Mac ОС
- Opera: ОС Windows
- Android-браузер
- и некоторые другие, смотрите в табличке ниже.
