Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 20007|Відповідь: 1

[ASP.NET] Вступ і знайомство з SignalR

[Копіювати посилання]
Опубліковано 05.07.2017 10:21:40 | | | |
1. Що таке SignalR:        
ASP.NET SignalR — це бібліотека класів, створена для спрощення процесу додавання живого вебконтенту до додатків розробниками. Веб-функціонал у реальному часі означає дозволити серверному коду активно надсилати контент клієнтам у будь-який момент, замість того, щоб сервер чекав запиту від клієнта (перед поверненням контенту).
Усі «живі» веб-функції можна додати до вашого ASP.NET додатку за допомогою SignalR. Найпоширеніший приклад — це чати, але ми можемо робити набагато більше. Розглянемо такі ситуації: користувачам потрібно постійно оновлювати веб-сторінку, щоб бачити останні дані; Або отримати (і відобразити) нові дані на сторінці, реалізувавши довге опитування, тоді можна розглянути використання SignalR для цього. Наприклад: дашборди та додатки для моніторингу; Спільні застосунки (наприклад, кілька людей одночасно редагують документи); Оновлення про прогрес роботи та форми презентацій у реальному часі тощо.
SignalR також підходить для новіших типів веб-додатків, які потребують високочастотних оновлень із сервера, наприклад, для ігор у реальному часі. Ось гарний приклад: ShoorR.
SignalR надає простий API для користувачів для створення сервер-клієнтських віддалених викликів процедур (RPC), до яких можна легко отримати доступ із серверної сторони. Мережевий код. SignalR також включає з'єднання (наприклад, події з'єднання та відключення) та групування з'єднань.

SignalR може автоматично керувати з'єднаннями. І дозволяє надсилати трансляційні повідомлення всім підключеним клієнтам, як чат-кімната. Звісно, окрім масового надсилання, ви також можете надсилати повідомлення конкретним клієнтам. З'єднання між клієнтом і сервером є стійким, на відміну від традиційного HTTP-протоколу, який вимагає відновлення з'єднання для кожної комунікації.
SignalR підтримує функцію «server push», коли серверний код може викликати клієнтський код у браузері, використовуючи віддалені виклики процедур (RPC) замість запитів, які наразі широко використовуються у вебі — відповідну модель обробки.
Додатки SignalR можна розширювати на тисячі клієнтів за допомогою Service Bus, SQL SERVER або Redis.
SignalR має відкритий код і доступний через GitHub.

2. SignalR та WebSocket        

ignalR використовує метод транспортування WebSocket — де це можливо. І автоматично переключається на старий метод транспортування (наприклад, довге HTTP-з'єднання). Ви, безумовно, можете писати додаток безпосередньо за допомогою WebSockets, але використання SignalR дає більше додаткових функцій без необхідності винаходити велосипед заново. Найголовніше — ви можете зосередитися на бізнес-реалізації, не думаючи про створення сумісного коду окремо для старого клієнта. SignalR також дозволяє уникнути турбот про оновлення WebSocket, оскільки SignalR продовжуватиме оновлюватися для підтримки зміни базових методів транспортування, щоб забезпечити узгоджений інтерфейс доступу для додатків у різних версіях WebSockets.
Звісно, ви можете створити рішення, яке використовує лише WebSocket transport, і SignalR надає всі можливості, необхідні для написання власного коду, наприклад, можливість переходити до інших методів транспорту та модифікувати додаток для нових реалізацій WebSocket.

3. Транспорт і повернення      

SignalR — це абстракція транспортної технології, необхідної для реалізації функцій реального часу між клієнтами та серверами. SignalR спочатку запускає з'єднання через HTTP і перевіряє, чи доступний WebSocket — якщо так, оновіть до з'єднання WebSocket. WebSocket є найідеальнішим методом передачі для SignalR, оскільки він найефективніше використовує пам'ять сервера, має найнижчу затримку та комплексні базові функції (наприклад, повнодуплексний зв'язок між клієнтом і сервером), але також має найсуворіші вимоги: сервер повинен використовувати операційну систему Windows Server 2012 або Windows 8, і водночас. .NET фреймворк версії 4.5 і вище. Якщо ці вимоги не виконані, SignalR спробує використати альтернативний спосіб передачі для підключення.

4. Постачання HTML5         

Метод транспорту залежить від того, чи підтримує клієнтський браузер HTML5, інакше буде використано старий транспортний метод.
          WebSocket (якщо і сервер, і браузер підтримують WebSocket). WebSocket — це єдиний спосіб встановити справжнє і стійке двостороннє з'єднання як на стороні клієнта, так і на сервері. Звісно, WebSocket також має найсуворіші вимоги: він підтримується лише в останніх версіях IE, Chrome і FF, і лише частково реалізований в інших браузерах, таких як Opera та Safari.
Сервер надсилає події, також відомі як EventSource (якщо браузер підтримує події для відправлення сервера, практично всі браузери, крім IE, підтримують цю функцію).

5. Передача комети

Наступні типи транспорту базуються на моделі веб-додатків Comet, де браузер або клієнт підтримує довгий HTTP-запит, а сервер може надсилати дані клієнту без явного запиту від клієнта.
Forever Frame (тільки IE) Forever Frame створює прихований IFrame, який надсилає запит серверу, який не буде виконаний. Сервер потім безперервно надсилає скрипти клієнту, і клієнт виконується негайно, тобто одностороннє з'єднання в реальному часі від сервера до клієнта. Клієнт-сервер використовує інше з'єднання, ніж це з'єднання. Наприклад, стандартний HTML-запит створює нове з'єднання для кожного надісланого даних.
Довготривале опитування Ajax не створює постійного з'єднання, а опитує, постійно роблячи запити до сервера. Дочекайтеся відповіді сервера і закривайте це з'єднання на кожному з'єднанні, а потім одразу зробіть новий запит. Звісно, це спричинить затримку при скиданні та повторному підключенні з'єднання.
Для інформації про методи транспортування, які підтримуються різними конфігураціями, див. розділ «Підтримувані платформи». (Тобто потрібно 8 або більше, інші браузери мають поточну версію -1)
Процес вибору методу передачі
Наступний список показує, як SignalR вирішує, який тип використовувати для передачі.
IE8 і раніше використовуйте довгі опитування.
Якщо JSONP налаштовано (тобто параметр jsonp встановлено як true при підключенні), використовуйте long polling.
Якщо ви використовуєте міждоменне з'єднання (тобто кінцева точка SignalR і сторінка не знаходяться в одному домені), тоді використовуйте WebSockets, якщо виконані такі умови:
Клієнт підтримує міждоменне спільне використання ресурсів (CORS), див. CORS для деталей
Клієнт підтримує WebSocket
Сервер підтримує WebSocket
Якщо будь-яка з наведених умов не виконана, використовується довге опитування. Для отримання додаткової інформації про міждоменні з'єднання дивіться у розділі «Як встановити міждоменні з'єднання».
Якщо ви не налаштували використання JSONP і з'єднання не є міждоменним, звісно, використовуйте WebSocket, за умови, що і клієнт, і сервер підтримують WebSocket.
Якщо клієнт або сервер не підтримує WebSockets, використовуйте сервер для надсилання подій.
Якщо сервер надсилає подію недоступний, використовуйте Forever Frame.
Якщо Forever Frame недоступний, використовуйте довге опитування.
Моніторна передача
Ви можете побачити, який метод транспортування використовує ваш додаток, увімкнувши логування Hub у консолі браузера.
Щоб увімкнути ведення журналу, додайте до клієнтського додатку наступну команду:
nnection.hub.logging = true;

6. Інспекція та транспортування:    

Ви можете побачити, який метод транспортування використовує ваш додаток, увімкнувши логування Hub у консолі браузера. Щоб увімкнути ведення журналу, додайте до клієнтського додатку наступну команду:
    nnection.hub.logging = true;
        $.connection.hub.logging = true;
У IE натисніть F12, щоб відкрити інструменти розробника, і натисніть вкладку Console.

У Chrome натисніть Ctrl+Shift+J, щоб відкрити консоль


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


7. Призначене судноплавство:

Переговори щодо методу передачі потребують певного часу та ресурсів сервера/клієнта. Якщо клієнтське середовище відоме, то метод транспортування можна вказати при початку з'єднання для покращення продуктивності. Наступний код демонструє використання довгого опитування Ajax безпосередньо при початку з'єднання, якщо відомо, що клієнт підтримує будь-який інший протокол:
connection.start({ transport: 'longPolling' });
Якщо ви хочете, щоб клієнт домовився про транспортування у певному порядку, ви можете вказати порядок, у якому намагаються вести переговори. Нижче наведений код показує, як спочатку спробувати використати WebSockets і одразу після збою використовувати довге опитування.
connection.start({ transport: ['webSockets,'longPolling'] });
Константи рядків, визначені користувачем, визначаються наступним чином:
webSockets
forverFrame
serverSentEvents
longPolling

8. З'єднання та хаби API SignalR включає дві моделі зв'язку клієнт-сервер: постійні з'єднання та хаби.

З'єднання є простою кінцевою точкою для надсилання одного, згрупованого або широкомовного повідомлення. API PersistentConnection (представлений класом PersistentConnection у .NET-коді) надає розробникам прямий доступ до базового комунікаційного протоколу SignalR. Розробники, які використовували API на основі з'єднання, такі як WCF, краще знайомі з моделлю комунікації з'єднання.
Хаби — це API, але більш високорівневі комунікаційні конвеєри, які дозволяють клієнтам і серверам викликати методи безпосередньо один до одного. SignalR чудово справляється з крос-машинним плануванням, дозволяючи клієнтам легко викликати методи на сервері, ніби вони викликають локальні методи, і навпаки. Розробники, які використовували AIP на основі віддалених дзвінків, такі як .Net Remoting, краще знайомі з моделлю хабу. Використовуючи хаб, ви також можете передавати сильно типізовані параметри методам і прив'язувати їх до моделі.

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


9. Як працює хаб:

Коли код сервера викликає клієнта, сервер надсилає пакет із методом виклику та параметрами (коли об'єкт використовується як параметр методу, він серіалізується як JSON для відправлення) клієнту. Клієнт потім перевіряє ім'я отриманого методу і виконує пошук відповідності у методі, визначеному клієнтом, і якщо відповідність успішна, метод виконується, а десеріалізований об'єкт використовується як параметр методу.
Ви можете використовувати інструменти на кшталт Fiddler для моніторингу виконання виклику методів. Наступне зображення показує метод, отриманий із журналів Fiddler, який буде переданий із сервера SignalR до клієнта веб-браузера. Метод, ініційований із хабу, називається MoveShapeHub, а метод — updateShape.


У цьому прикладі ім'я хабу ототожнюється параметром «H», назва методу — параметром «M», а об'єкт параметра, що надісланий методу, ідентифікується з параметром «A». Застосунок, який генерував повідомлення, був реалізований у навчальному посібнику з високочастотного реального часу в реальному часі.
Виберіть модель комунікації:
Більшість додатків використовують API хабу, який може використовуватися у таких ситуаціях:
Потрібно вказати формат, у якому надсилається повідомлення.
Розробники віддають перевагу моделі обміну повідомленнями та плануванням, а не моделі віддалених дзвінків
Модель обміну повідомленнями використовується в існуючих застосунках і планується портувати її на SignalR.






Попередній:.net/c# багатопотокові колекції змін стануть проблемою?
Наступний:asp.net mvc4.0 Встановлення SignalR (1)
 Орендодавець| Опубліковано 27.08.2018 14:18:05 |
Пояснення поширених методів хабу


Клієнти. Абонент: Може спілкуватися з абонентом

Клієнти.Інші: Спілкується з усіма клієнтами, підключеними до цього хабу, окрім вас

Clients.All: Може спілкуватися з усіма клієнтами, підключеними до цього хабу

Clients.OthersInGroup: Може спілкуватися з іншими клієнтами, підключеними до хабу, окрім зазначеної групи

Clients.Client: Спілкується з клієнтами, які вказують ConnectionId

Clients.AllExcept: Може спілкуватися з усіма клієнтами, підключеними до цього хабу, окрім вказаного ConnectionId

Clients.Group: Спілкується з клієнтами у визначеній групі

Clients.User:可以与指定的userId进行通信
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com