Cadente
Esta página foi traduzida automaticamente do inglês. Ler o original
Cadente é uma implementação experimental de ouvinte HTTP/1.1 gerenciado para Sisk. Ele serve como substituto para o System.Net.HttpListener padrão, oferecendo maior controle e flexibilidade, especialmente em plataformas não-Windows.
Visão Geral #
Por padrão, o Sisk usa HttpListener (do System.Net) como seu mecanismo de servidor HTTP subjacente. Embora HttpListener seja estável e performático no Windows (onde ele usa o driver HTTP.sys do kernel), sua implementação no Linux e macOS é gerenciada e historicamente teve limitações, como falta de suporte nativo SSL (requerendo um proxy reverso como Nginx ou Sisk.SslProxy) e características de desempenho variadas.
Cadente visa resolver esses problemas fornecendo um servidor HTTP/1.1 totalmente gerenciado escrito em C#. Seus principais objetivos são:
- Suporte Nativo SSL: Funciona em todas as plataformas sem precisar de proxies externos ou configuração complexa.
- Consistência Cross-Platform: Comportamento idêntico no Windows, Linux e macOS.
- Desempenho: Projetado para ser uma alternativa de alto desempenho ao
HttpListenergerenciado. - Independência: Desacoplado do
System.Net.HttpListener, isolando o Sisk de possíveis depreciações futuras ou falta de manutenção desse componente no .NET.
Aviso
Status Experimental
Cadente está atualmente em uma fase experimental (Beta). Ele não é recomendado ainda para ambientes de produção críticos. A API e o comportamento podem mudar.
Instalação #
Cadente está disponível como um pacote separado. Para usá-lo com Sisk, você precisa do pacote Sisk.Cadente.CoreEngine.
dotnet add package Sisk.Cadente.CoreEngine --prereleaseUsando com Sisk #
Para usar Cadente como o mecanismo de servidor HTTP para sua aplicação Sisk, você precisa configurar o HttpServer para usar CadenteHttpServerEngine em vez do mecanismo padrão.
O CadenteHttpServerEngine adapta o HttpHost do Cadente à abstração HttpServerEngine necessária pelo 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();Configuração Avançada #
Você pode personalizar a instância subjacente HttpHost passando uma ação de configuração para o construtor do CadenteHttpServerEngine. Isso é útil para configurar tempos de espera ou outros ajustes de nível baixo.
using var engine = new CadenteHttpServerEngine(host =>
{
// Configure tempos de espera de leitura/escrita do cliente
host.TimeoutManager.ClientReadTimeout = TimeSpan.FromSeconds(30);
host.TimeoutManager.ClientWriteTimeout = TimeSpan.FromSeconds(30);
});Uso Autônomo #
Embora projetado principalmente para Sisk, Cadente pode ser usado como um servidor HTTP autônomo (semelhante ao 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("Olá, mundo!");
}
}