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

DarkWS

Эти страницы описывают API исходников 5.0.0. Для выпущенных пакетов 4.0.0 выберите 4.x в переключателе версий и используйте примеры своей версии пакетов.

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 для развёртываний с несколькими экземплярами.
  • Фильтры действий, фильтры запросов, инициализаторы областей и хуки жизненного цикла соединения.
  • Ограничение параллелизма на соединение, лимиты размера сообщений, проверка активности соединения, последовательная запись в сокет и корректное завершение работы.
  • Браузерный клиент без зависимостей и асинхронный .NET-клиент — оба с переподключением, таймаутами и автоматическим восстановлением сессии.
  • Тестовый хост, который прогоняет обработчики через настоящий серверный конвейер без сокетов.

Пакеты​

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

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

Требования​

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

Что дальше​