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.Redis | Redis 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-сериализация используют рефлексию и генерацию кода во время выполнения.
Что дальше
- Начало работы — сборка работающего сервера и клиента.
- Обработчики и действия — как запросы попадают в ваш код.
- Браузерный клиент и .NET-клиент описывают клиенты.
- Протокол описывает формат сообщений для написания собственного клиента.