Перейти к основному содержимому
Версия: 4.x

DarkWS

Этот снимок описывает выпущенный API 4.0.0. Команды установки закрепляют NuGet-пакеты на 4.0.0, а npm — на darkws@4. Текущая документация описывает API исходников 5.0.0; её примеры используют другой API.

DarkWS — это компактный протокол запросов и ответов поверх WebSocket для ASP.NET Core и браузеров. Вы пишете классы-обработчики с действиями, размеченными атрибутами; клиенты вызывают их по имени и получают типизированные результаты через одно долгоживущее соединение. Сервер может отправлять рассылки всем клиентам, одному соединению, одной сессии или одной группе — на одном экземпляре или на нескольких через Redis.

[Handler("math")]
public sealed class MathHandler : HandlerBase {
[Action("sum")]
public IResponse Sum(SumInput input) => Ok(input.Left + input.Right);
}
const total = await client.request<number>("math:sum", { left: 2, right: 3 }); // 5

Возможности​

  • Сопоставление запросов и ответов в рамках одного WebSocket-соединения; ответы могут приходить не по порядку.
  • Синхронные и асинхронные обработчики на атрибутах, с новой областью DI для каждого запроса.
  • Типизированные сессии приложения, необязательный доступ к ASP.NET ISession, аутентификация при подключении и повторная аутентификация без переподключения.
  • Рассылки всем клиентам, одному соединению, одной сессии или одной группе.
  • Работа в памяти без дополнительных зависимостей и необязательный Redis backplane для развёртываний с несколькими экземплярами.
  • Инициализаторы областей и middleware жизненного цикла соединения.
  • Ограничение параллелизма на соединение, лимиты размера сообщений, проверка активности соединения, последовательная запись в сокет и корректное завершение работы.
  • Браузерный клиент без зависимостей и асинхронный .NET-клиент — оба с переподключением и таймаутами. .NET-клиент также умеет восстанавливать сессию на каждом новом сокете.

Пакеты​

ПакетНазначение
DarkWSСервер ASP.NET Core с backplane в памяти
DarkWS.RedisRedis backplane для развёртываний с несколькими экземплярами
DarkWS.ClientАсинхронный .NET-клиент с типизированными запросами и рассылками
DarkWS.Client.DependencyInjectionНеобязательная регистрация IDarkWsClient в Microsoft DI
darkws (npm)Браузерный ESM-клиент без зависимостей с объявлениями TypeScript

У всех пакетов общий номер версии. Обновляйте серверы и клиенты одновременно.

Требования​

  • .NET-пакеты нацелены на .NET 8, 9 и 10. Три целевые платформы выбраны намеренно: .NET 8 обнаруживает мёртвые соединения по таймауту приёма на уровне приложения, а .NET 9 и новее используют таймауты PING/PONG транспорта.
  • Браузерный пакет рассчитан на современные браузеры с нативными WebSocket и crypto.randomUUID().
  • Native AOT и публикация с триммингом не поддерживаются: обнаружение обработчиков, скомпилированные делегаты и JSON-сериализация используют рефлексию и генерацию кода во время выполнения.

Что дальше​