Cadente
Эта страница переведена с английского автоматически. Читать оригинал
Cadente является экспериментальной управляемой реализацией слушателя HTTP/1.1 для Sisk. Он служит заменой стандартному System.Net.HttpListener, предлагая большую гибкость и контроль, особенно на платформах, не являющихся Windows.
Обзор #
По умолчанию Sisk использует HttpListener (из System.Net) в качестве основного движка HTTP-сервера. Хотя HttpListener стабилен и производителен на Windows (где он использует драйвер HTTP.sys ядра), его реализация на Linux и macOS является управляемой и исторически имела ограничения, такие как отсутствие родной поддержки SSL (требующей обратного прокси, например, Nginx или Sisk.SslProxy) и различающиеся характеристики производительности.
Cadente призван решить эти проблемы, предоставляя полностью управляемый HTTP/1.1-сервер, написанный на C#. Его основные цели:
- Родная поддержка SSL: Работает на всех платформах без необходимости внешних прокси или сложной конфигурации.
- Кроссплатформенная согласованность: Идентичное поведение на Windows, Linux и macOS.
- Производительность: Разработан как высокопроизводительная альтернатива управляемому
HttpListener. - Независимость: Отделен от
System.Net.HttpListener, изолируя Sisk от потенциальных будущих устареваний или отсутствия поддержки этого компонента в .NET.
Предупреждение
Экспериментальный статус
Cadente в настоящее время находится на экспериментальной стадии (Бета). Он еще не рекомендуется для критических производственных сред. API и поведение могут измениться.
Установка #
Cadente доступен как отдельный пакет. Чтобы использовать его с Sisk, вам нужен пакет Sisk.Cadente.CoreEngine.
dotnet add package Sisk.Cadente.CoreEngine --prereleaseИспользование с Sisk #
Чтобы использовать Cadente в качестве движка HTTP для вашего приложения Sisk, вам нужно настроить HttpServer на использование CadenteHttpServerEngine вместо стандартного движка.
CadenteHttpServerEngine адаптирует HttpHost Cadente к абстракции HttpServerEngine, необходимой для Sisk.
using Sisk.Core.Http;
using Sisk.Cadente.CoreEngine;
using var host = HttpServer.CreateBuilder()
.UseEngine<CadenteHttpServerEngine>()
.UseSsl(certificate: CertificateHelper.CreateTrustedDevelopmentCertificate("localhost"))
.Build();
await host.StartAsync();Расширенная конфигурация #
Вы можете настроить базовый экземпляр HttpHost, передав действие настройки в конструктор CadenteHttpServerEngine. Это полезно для настройки таймаутов или других низкоуровневых настроек.
using var engine = new CadenteHttpServerEngine(host =>
{
// Настройка таймаутов чтения/записи клиента
host.TimeoutManager.ClientReadTimeout = TimeSpan.FromSeconds(30);
host.TimeoutManager.ClientWriteTimeout = TimeSpan.FromSeconds(30);
});Самостоятельное использование #
Хотя в основном предназначен для Sisk, Cadente можно использовать как самостоятельный HTTP-сервер (аналогично HttpListener).
using Sisk.Cadente;
var host = new HttpHost(15000)
{
Handler = new MyHostHandler()
};
host.Start();
Thread.Sleep(-1);
class MyHostHandler : HttpHostHandler
{
public override async Task OnContextCreatedAsync(HttpHost host, HttpHostContext context)
{
context.Response.StatusCode = 200;
using var writer = new StreamWriter(context.Response.GetResponseStream());
await writer.WriteLineAsync("Привет, мир!");
}
}