0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><strong>ASP.NET Core SignalR</strong>- это библиотека с открытым исходным кодом. Она позволяет создавать приложения в реальном времени и по настоящему, то есть не по принципу "запрос-ответ", а независимо. В результате сервер сам решает, когда надо ответить и не ждет клиента. Например, сервер-сервер-клиент или клиент-сервер-сервер. Нет очередности, два актора общаются независимо.</p>
1
<p><strong>ASP.NET Core SignalR</strong>- это библиотека с открытым исходным кодом. Она позволяет создавать приложения в реальном времени и по настоящему, то есть не по принципу "запрос-ответ", а независимо. В результате сервер сам решает, когда надо ответить и не ждет клиента. Например, сервер-сервер-клиент или клиент-сервер-сервер. Нет очередности, два актора общаются независимо.</p>
2
<p>Такое поведение похоже на толстый клиент у которого нет сервера и который работает на нашем ПК без подключения к интернету. Поэтому signalR настолько перспективная технология. Сайт, работающий с использованием SignalR, я бы назвал web 3.0.</p>
2
<p>Такое поведение похоже на толстый клиент у которого нет сервера и который работает на нашем ПК без подключения к интернету. Поэтому signalR настолько перспективная технология. Сайт, работающий с использованием SignalR, я бы назвал web 3.0.</p>
3
<h2>Почему не везде используют SignalR</h2>
3
<h2>Почему не везде используют SignalR</h2>
4
<p>Когда я первый раз понял мощь технологии, я подумал, а почему сайты не используют SignalR? Ведь это так круто, всё в реальном времени. Простой ответ -<strong>цена</strong>. К сожалению, для рядовых сайтов такая технология будет дорогой. Например, максимальное число соединений в теории 65534 для Windows по умолчанию стоит 5000 свободных соединений. К примеру, если посещаемость нашего сайта 1 млн уникальных пользователей в день, то нам нужно арендовать кластер из 15.5 серверов или виртуальных машин. С другой стороны, если ваша посещаемость 1 млн -- вы уже успешный стартап и, скорее всего, можете позволить себе 15 виртуальных машин 🙂</p>
4
<p>Когда я первый раз понял мощь технологии, я подумал, а почему сайты не используют SignalR? Ведь это так круто, всё в реальном времени. Простой ответ -<strong>цена</strong>. К сожалению, для рядовых сайтов такая технология будет дорогой. Например, максимальное число соединений в теории 65534 для Windows по умолчанию стоит 5000 свободных соединений. К примеру, если посещаемость нашего сайта 1 млн уникальных пользователей в день, то нам нужно арендовать кластер из 15.5 серверов или виртуальных машин. С другой стороны, если ваша посещаемость 1 млн -- вы уже успешный стартап и, скорее всего, можете позволить себе 15 виртуальных машин 🙂</p>
5
<h2>Где использовать SignalR</h2>
5
<h2>Где использовать SignalR</h2>
6
<p>100%-ная необходимость использовать SignalR нужна там, где скорость визуализации данных критична. Например, ПО брокера на бирже. Или АСУ ТП (Автоматизированная система управления технологическим процессом), чаты и т. п. Вообще, я бы не исключал данную технологию и для простых небольших сайтов, у нас же 65 тыс. соединений -- это всё равно неплохо.</p>
6
<p>100%-ная необходимость использовать SignalR нужна там, где скорость визуализации данных критична. Например, ПО брокера на бирже. Или АСУ ТП (Автоматизированная система управления технологическим процессом), чаты и т. п. Вообще, я бы не исключал данную технологию и для простых небольших сайтов, у нас же 65 тыс. соединений -- это всё равно неплохо.</p>
7
<p>Через SignalR можно передавать файлы. В одном из проектов мы например передавали звук (в виде байтов) каждые 100 мс небольшими порциями. Собственно байтами можно передавать что угодно в том числе и файлы (но для этого лучше использовать обычный POST запрос, браузер также передаст файл частями на сервер).</p>
7
<p>Через SignalR можно передавать файлы. В одном из проектов мы например передавали звук (в виде байтов) каждые 100 мс небольшими порциями. Собственно байтами можно передавать что угодно в том числе и файлы (но для этого лучше использовать обычный POST запрос, браузер также передаст файл частями на сервер).</p>
8
<h2>Зачем использовать .Net Signalr, если есть WebSocket</h2>
8
<h2>Зачем использовать .Net Signalr, если есть WebSocket</h2>
9
<p>Signalr работает с android, iOS, можно использовать в консольных приложениях, десктопных приложениям и в WPF. Во вторых, SignalR -- это обертка над веб-сокетом, поэтому, если ваш браузер не поддерживает веб-сокеты или пользователь отключил его, то SignalR все равно будет имитировать работу в реальном времени через механизм передачи данных Long Polling.</p>
9
<p>Signalr работает с android, iOS, можно использовать в консольных приложениях, десктопных приложениям и в WPF. Во вторых, SignalR -- это обертка над веб-сокетом, поэтому, если ваш браузер не поддерживает веб-сокеты или пользователь отключил его, то SignalR все равно будет имитировать работу в реальном времени через механизм передачи данных Long Polling.</p>
10
<h2>Какие способы передачи данных в реальном времени поддерживает Signalr Core:</h2>
10
<h2>Какие способы передачи данных в реальном времени поддерживает Signalr Core:</h2>
11
<ol><li><strong>WebSocket</strong>- протокол (rfc7118), поддерживающий двухстороннюю передачу данных в реальном времени. Доступен почти по всех современных браузерах. И поддерживается некоторыми приложениями, ориентированными на веб.</li>
11
<ol><li><strong>WebSocket</strong>- протокол (rfc7118), поддерживающий двухстороннюю передачу данных в реальном времени. Доступен почти по всех современных браузерах. И поддерживается некоторыми приложениями, ориентированными на веб.</li>
12
<li><strong>Server-Sent Events</strong>- по названию можно сказать, что сервер передает данные, а клиент слушает данные с сервера, работает по протоколу http.</li>
12
<li><strong>Server-Sent Events</strong>- по названию можно сказать, что сервер передает данные, а клиент слушает данные с сервера, работает по протоколу http.</li>
13
<li><strong>Long polling</strong>- способ, когда клиент, например, каждые 100 мс долбит сервер сообщениями. Возможно, вы неосознанно реализовывали данный способ. Когда на JavaScript заворачивали функцию в setInterval().</li>
13
<li><strong>Long polling</strong>- способ, когда клиент, например, каждые 100 мс долбит сервер сообщениями. Возможно, вы неосознанно реализовывали данный способ. Когда на JavaScript заворачивали функцию в setInterval().</li>
14
</ol>// Пример 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); });<h2>Поддержка WebSocket в браузерах:</h2>
14
</ol>// Пример 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); });<h2>Поддержка WebSocket в браузерах:</h2>
15
<ul><li>Microsoft Internet Explorer 8, 9, 10, 11. Modern, Desktop, Mobile;</li>
15
<ul><li>Microsoft Internet Explorer 8, 9, 10, 11. Modern, Desktop, Mobile;</li>
16
<li>Mozilla Firefox: на Windows, на Mac ОС;</li>
16
<li>Mozilla Firefox: на Windows, на Mac ОС;</li>
17
<li>Google Chrome: Windows и на Mac ОС;</li>
17
<li>Google Chrome: Windows и на Mac ОС;</li>
18
<li>Safari: на Windows и на Mac ОС;</li>
18
<li>Safari: на Windows и на Mac ОС;</li>
19
<li>Opera: ОС Windows;</li>
19
<li>Opera: ОС Windows;</li>
20
<li>Android-браузер;</li>
20
<li>Android-браузер;</li>
21
<li>и некоторые другие, смотрите в табличке ниже.</li>
21
<li>и некоторые другие, смотрите в табличке ниже.</li>
22
</ul><p><em>Больше статей о программировании читайте<a>в моем блоге</a>.</em></p>
22
</ul><p><em>Больше статей о программировании читайте<a>в моем блоге</a>.</em></p>
23
23