KestrelServer详解[2]: 网络连接的创建

本文深入探讨了KestrelServer的连接上下文ConnectionContext、连接监听器IConnectionListener的设计与实现,以及如何利用连接接收HTTP请求和发送响应。KestrelServer支持HTTP 1.x、2、3协议,对于不同协议使用不同的连接类型,如SocketConnection(TCP)和QuicStreamContext(QUIC)。通过IConnectionListenerFactory创建监听器,监听器接受连接并创建ConnectionContext,用于处理请求和响应。文章还提供了一个实例,展示如何直接处理连接请求和响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python微信订餐小程序课程视频

https://edu.youkuaiyun.com/course/detail/36074

Python实战量化交易理财系统

https://edu.youkuaiyun.com/course/detail/35475
注册监听终结点(Endpoint)》已经详细讲述了如何使用KestrelServer,现在我们来简单聊聊这种处理器的总体设计和实现原理。当KestrelServer启动的时候,注册的每个终结点将转换成对应的“连接监听器”,后者在监听到初始请求时会创建“连接”,请求的接收和响应的回复都在这个连接中完成。本文提供的示例演示已经同步到《ASP.NET Core 6框架揭秘-实例演示版》)

一、连接上下文(ConnectionContext )

监听器创建的连接时一个抽象的概念,我们可以将其视为客户端和服务端完成消息交换而构建的“上下文”,该上下文通过如下这个ConnectionContext类型表示。ConnectionContext派生于抽象基类BaseConnectionContext,后者实现了IAsyncDisposable接口。每个连接具有一个通过ConnectionId属性表示的ID,它的LocalEndPoint和RemoteEndPoint属性返回本地(服务端)和远程(客户端)终结点。服务器提供的特性集合体现在它的Features属性上,另一个Items提供了一个存放任意属性的字典。ConnectionClosed属性提供的CancellationToken可以用来接收连接关闭的通知。Abort方法可以中断当前连接,这两个方法在ConnectionContext被重写。ConnectionContext类型的Transport属性提供的IDuplexPipe对象是用来对请求和响应进行读写的双向管道。

public abstract class ConnectionContext : BaseConnectionContext
{
    public abstract IDuplexPipe Transport { get; set; }
    public override void Abort(ConnectionAbortedException abortReason);
    public override void Abort();
}

public abstract class BaseConnectionContext : IAsyncDisposable
{
    public virtual EndPoint? LocalEndPoint { get; set; }
    public virtual EndPoint? RemoteEndPoint { get; set; }
    public abstract string ConnectionId { get; set; }
    public abstract IFeatureCollection Features { get; }
    public abstract IDictionary<object, object?> Items { get; set; }
    public virtual CancellationToken ConnectionClosed { get; set; }

    public abstract void Abort();
    public abstract void Abort(ConnectionAbortedException abortReason);
    pu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值