跳到主要内容
版本:4.0-beta

创建DmtpService

定义

命名空间:
TouchSocket.Dmtp
安装:
dotnet add package TouchSocket.Dmtp

定义

命名空间:
TouchSocketPro.Dmtp
安装:
dotnet add package TouchSocketPro.Dmtp

一、说明

DmtpService是基于Dmtp协议的服务器基类,它不参与实际的数据交互,只是配置、激活、管理、注销、重建SessionClient类实例。而SessionClient是当DmtpClient(客户端)成功连接服务器以后,由服务器新建的一个实例类,后续的所有通信,也都是通过该实例完成的。

Dmtp的服务器有多种形式的host,每种服务器的创建都大同小异,且功能基本一致。基于不同的底层协议(TCP、UDP、HTTP、WebSocket、NamedPipe),提供了统一的Dmtp协议接口。

二、特点

  • 简单易用。
  • 支持多种底层协议(TCP、UDP、HTTP、WebSocket、NamedPipe)。
  • 统一的Dmtp协议接口,无论底层协议如何,上层API保持一致。
  • 多线程。
  • 内存池支持
  • 高性能数据传输和RPC调用。
  • 多地址监听(TCP协议时可以一次性监听多个IP及端口)
  • 适配器预处理,一键式解决分包粘包等问题。
  • 超简单的同步发送、异步发送、接收等操作。
  • 基于委托、插件驱动,让每一步都能执行AOP。
  • 支持文件传输、RPC调用、远程访问等高级功能。

2.1 性能测试

Dmtp基于底层协议的性能表现,当使用TCP作为底层协议时,性能与TcpService基本一致。同时,Dmtp还提供了更多高级功能如RPC、文件传输等,在保证高性能的同时提供了更丰富的功能。

三、产品应用场景

  • 需要高级通信功能的场景:RPC调用、文件传输、远程访问等。
  • 跨协议统一接口需求:可以轻松在不同底层协议间切换而不改变上层代码。
  • 企业级应用:支持认证、路由、通道管理等企业级功能。
  • 微服务架构:提供高性能的服务间通信解决方案。

四、服务器架构

4.1 连接架构

Dmtp服务器的架构与其所属的基础协议架构一致,例如,在基于TCP协议时,其架构就和TCP服务器一致。服务器在收到新客户端连接时,会创建一个对应的SessionClient派生类实例(如TcpDmtpSessionClient),与客户端DmtpClient一一对应,后续的数据通信均由此实例负责。

SessionClientService里面以字典映射。ID为键,SessionClient本身为值。

4.2 Scoped 生命周期

DmtpService支持ScopedIOC容器中工作时,也是支持Scoped区域划分的。

一般情况下,DmtpServiceSetup时,首先会创建一个Scoped区域,用于整个DmtpService的生命周期。在DmtpService释放(Dispose)时释放。

然后,当有新客户端连接后,会为每个SessionClient的派生类实例也创建一个Scoped区域,用于SessionClient的生命周期。当连接断开时,会释放此区域。

五、可配置项

5.1 Dmtp特有配置

SetDmtpOption

设置Dmtp相关配置。其中包含:

🔄 正在加载代码...
  • VerifyToken:设置验证口令,作用类似账号密码。客户端连接时必须提供正确的Token才能建立连接。
  • VerifyTimeout:验证连接超时时间。仅用于服务器。意为:当服务器收到基础链接,在指定的时间内如果没有收到握手信息,则直接视为无效链接,直接断开。

5.2 底层协议配置

根据不同的底层协议,DmtpService还可以配置相应协议的特有选项:

六、支持插件接口

声明自定义插件类,实现IPlugin接口,或者继承PluginBase,然后实现所需插件接口,即可实现事务的触发。

插件方法功能
IDmtpConnectingPlugin客户端在验证连接。默认情况下,框架会首先验证连接Token是否正确,如果不正确则直接拒绝。不会有任何投递。用户也可以使用Metadata进行动态验证。
IDmtpConnectedPlugin客户端完成握手连接验证
IDmtpReceivedPlugin在收到Dmtp格式的数据包时触发
IDmtpRoutingPlugin当需要路由数据时触发,并且必须返回e.IsPermitOperation=true时,才允许路由
IDmtpCreatedChannelPlugin在收到创建通道的请求时候触发。
IDmtpClosingPlugin即将断开连接时触发(仅主动断开时、或收到了Close报文时有效)。
IDmtpClosedPlugin在Dmtp连接断开时触发。

七、创建服务器

DmtpService的创建,主要是根据不同的底层协议,创建不同的DmtpService派生类实例。

7.1 TcpDmtpService

TcpDmtpService是基于Tcp协议的Dmtp。在可配置的基础之上,还可以配置与TcpService可配置项相关的配置。

🔄 正在加载代码...

7.2 UdpDmtp

UdpDmtp是基于Udp协议Dmtp。在可配置的基础之上,还可以配置与UdpSession可配置项相关的配置。

🔄 正在加载代码...
备注

UdpDmtp作为服务器的时候,需要设定SetBindIPHost

7.3 HttpDmtpService

HttpDmtpService是基于Http升级协议。在该解析器中,配置设置HttpService一致。

🔄 正在加载代码...

7.4 基于AspNetCore的Websocket协议

具体步骤

  1. nuget 安装TouchSocket.AspNetCore或者TouchSocketPro.AspNetCore
  2. IServiceCollection添加AddWebSocketDmtpService,并进行相关配置(不用配置端口,会和asp使用同一端口)。
  3. IApplicationBuilder必须先使用UseWebSockets
  4. IApplicationBuilder调用UseWebSocketDmtp,并传入url设置。

7.5 基于AspNetCore的Http协议

具体步骤

  1. nuget 安装TouchSocketPro.AspNetCore
  2. IServiceCollection添加AddHttpMiddlewareDmtpService,并进行相关配置(不用配置端口,会和asp使用同一端口)。
  3. IApplicationBuilder调用UseHttpDmtp
提示

在整个Apsnetcore的Host中,所有组件会共用一个容器。所以建议使用ConfigureContainer统一设置。

🔄 正在加载代码...

基于Aspnetcore的Dmtp示例Demo

7.6 基于NamedPipe协议

这是基于NamedPipe的Dmtp。在可配置的基础之上,还可以配置与NamedPipeService可配置项相关的配置。

🔄 正在加载代码...

基于NamedPipe的Dmtp示例Demo

八、示例Demo