TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3222 1.61K
День 2692. #ВопросыНаСобеседовании
Марк Прайс предложил свой набор из 60 вопросов (как технических, так и на софт-скилы), которые могут задать на собеседовании.

35. SignalR для веб-функциональности в реальном времени
«Расскажите, как реализовать систему уведомлений в реальном времени с использованием SignalR в приложении .NET? Опишите ключевые компоненты и как вы обеспечите масштабируемость и производительность системы».

Хороший ответ
Во-первых, нужно добавить библиотеку SignalR в проект .NET:
dotnet add package Microsoft.AspNetCore.SignalR


После этого создадим класс Hub, который выступает в качестве центрального координатора для входящих и исходящих сообщений. Здесь мы можем определить методы, которые клиенты будут вызывать для отправки сообщений на сервер. Сервер затем может транслировать эти сообщения другим подключённым клиентам:
public class NotificationHub : Hub
{
public async Task SendNotification(string message)
{
await Clients.All.SendAsync("ReceiveNotification", message);
}
}


В Program.cs зарегистрируем маршруты SignalR и убедимся в правильной конфигурации для использования WebSockets как метода транспортировки для лучшей производительности и снижения задержек:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalR();

var app = builder.Build();
app.MapHub<NotificationHub>("/notifications");

app.Run();


На стороне клиента в проект необходимо добавить клиентскую js-библиотеку signalr. Затем используем JavaScript-клиент SignalR для подключения к хабу и определения функций отправки и получения сообщений:
const conn = new signalR.HubConnectionBuilder()
.withUrl("/notifications")
.build();

conn.on("ReceiveNotification", function(message) {
console.log("New notification: " + message);
});

async function start() {
try {
await connection.start();
console.log("SignalR Connected.");
} catch (err) {
console.log(err);
setTimeout(start, 5000);
}
};

conn.onclose(start);
start();


Для масштабирования приложения SignalR можно использовать Azure SignalR Service, который переносит управление подключениями и масштабирование на управляемый сервис, способный обрабатывать миллионы одновременных подключений. В конфигурации приложения просто изменим настройки подключения для интеграции с Azure SignalR Service:
builder.Services
.AddSignalR()
.AddAzureSignalR("строка подключения");

Эта реализация охватывает создание хаба, конфигурацию в приложении и взаимодействие на стороне клиента, обеспечивая надёжные и масштабируемые возможности работы в режиме реального времени. Использование Azure SignalR Service помогает управлять и масштабировать приложение по мере увеличения нагрузки пользователей, обеспечивая бесперебойную работу в режиме реального времени.

Источник: https://github.com/markjprice/tools-skills-net8/blob/main/docs/interview-qa/readme.md
  • 👎 5
More from @netdeveloperdiary
  1. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  2. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  3. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  4. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  5. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
  6. Sep 22, 2026День 2792. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →