创建Dmtp客户端
定义
命名空间:TouchSocket.Dmtp
程序集:TouchSocket.Dmtp.dll
程序集:TouchSocketPro.Dmtp.dll
一、说明
Dmtp客户端对应的,也有不同协议的版本。各个版本之间功能基本一致。
二、可配置项
可配置项
三、支持插件接口
声明自定义插件类,实现IPlugin
接口,或者继承PluginBase
,然后实现所需插件接口,即可实现事务的触发。
插件方法 | 功能 |
---|---|
IDmtpHandshakingPlugin | 客户端在验证连接。默认情况下,框架会首先验证连接Token是否正确,如果不正确则直接拒绝。不会有任何投递。用户也可以使用Metadata进行动态验证。 |
IDmtpHandshakedPlugin | 客户端完成握手连接验证 |
IDmtpReceivedPlugin | 在收到Dmtp格式的数据包时触发 |
IDmtpRoutingPlugin | 当需要路由数据时触发,并且必须返回e.IsPermitOperation=true时,才允许路由 |
IDmtpCreatedChannelPlugin | 在收到创建通道的请求时候触发。 |
IDmtpClosingPlugin | 即将断开连接时触发(仅主动断开时、或收到了Close报文时有效)。 |
IDmtpClosedPlugin | 在Dmtp连接断开时触发。 |
四、创建
4.1 TcpDmtpClient
TcpDmtpClient
对应TcpDmtpService
服务器。基本创建如下,支持创建TcpClient的所有配置。
var client = new TcpDmtpClient();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
await client.ConnectAsync();
4.2 UdpDmtp
UdpDmtp
对应UdpDmtp
服务器,即UdpDmtp
即是服务器,又是客户端。基本创建如下,支持创建UdpSession的所有配置。
var client = new UdpDmtp();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7797")
.UseUdpReceive()
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
})
.ConfigureContainer(a =>
{
})
.ConfigurePlugins(a =>
{
}));
client.Start();
UdpDmtp
作为客户端时,需要设定默认的SetRemoteIPHost
,同时需要主动UseUdpReceive
,以开启udp接收。如果需要固定监听端口,可使用SetBindIPHost
。
4.3 HttpDmtpClient
HttpDmtpClient
对应HttpDmtpService
,或者HttpMiddlewareDmtpService
服务器。基本创建如下,支持创建HttpClient的所有配置。
var client = new HttpDmtpClient();
await client.SetupAsync(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
await client.ConnectAsync();
4.4 WebSocketDmtpClient
var websocketDmtpClient = new WebSocketDmtpClient();
websocketDmtpClient.Setup(new TouchSocketConfig()
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
})
.SetRemoteIPHost("ws://localhost:5174/WebSocketDmtp"));
await websocketDmtpClient.ConnectAsync();
4.5 DmtpClient工厂
DmtpClient工厂工作模式是一种,由多个传输通讯连接组成的连接池。默认提供了两种类型的客户端工厂,分别为TcpDmtpClientFactory
,HttpDmtpClientFactory
。两者工作流程及配置基本相同,下面以TcpDmtpClientFactory
为例。
【创建】
var clientFactory = new TcpDmtpClientFactory()
{
MinCount=5,//最小数量,在主连接器成功建立以后,会检测可用连接是否大于该值,否的话会自动建立。
MaxCount = 10,//最大数量,当超过该数量的连接后,会等待指定时间。
ConnectTimeout = TimeSpan.FromSeconds(10),//连接超时时间
GetConfig = () =>
{
return new TouchSocketConfig()
.SetRemoteIPHost("tcp://127.0.0.1:7789");
}
};
【使用】
using (var clientFactoryResult = await clientFactory.GetClient())
{
var client = clientFactoryResult.Client;
}
默认情况下,clientFactory.GetClient()
会最大等待1秒,如果超过1秒还没有可用的client
,会再新建一个客户端,并返回。然后在使用结束后,会判断是否需要释放该client
,如果池中的client
数量大于MaxCount
,则会释放该client
。
4.6 NamedPipeDmtpClient
NamedPipeDmtpClient
对应NamedPipeDmtpService
服务器。基本创建如下,支持创建NamedPipeClient的所有配置。
var client = new NamedPipeDmtpClient();
await client.SetupAsync(new TouchSocketConfig()
.SetPipeName("TouchSocketPipe")//设置管道名称
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
await client.ConnectAsync();