创建Dmtp客户端
定义
命名空间:TouchSocket.Dmtp
程序集:TouchSocket.Dmtp.dll
程序集:TouchSocketPro.Dmtp.dll
一、说明
Dmtp客户端对应的,也有不同协议的版本。各个版本之间功能基本一致。
二、可配置项
可配置项
SetDmtpOption
设置Dmtp相关配置。其中包含:
- VerifyToken:设置验证口令。
- Id:连接时指定Id。
- Metadata:连接时指定元数据。可以在连接时,指定一些字符串 键值对。
三、支持插件接口
声明自定义插件类,实现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,//最大数量,当超过该数量的连接后,会等待指定时间,或者永久等待。
OnGetTransferConfig = () => //配置辅助通信
{
return new TouchSocketConfig()
.SetRemoteIPHost("tcp://127.0.0.1:7789");
}
};
clientFactory.MainConfig
.SetRemoteIPHost("tcp://127.0.0.1:7789");//配置主通信
//检测主通信器连接,然后如果没有连接,会自动建立连接
Result result = clientFactory.CheckStatus();
一般的,主通讯器最好启用心跳插件,而传输通讯器,可以根据自己业务决定。
主通讯器的配置和传输通讯器的配置是 分离的,所以可以分开配置。
【使用】
var clientFactory = CreateTcpClientFactory();
var client = clientFactory.GetTransferClient();
try
{
//client.Invoke();//这里可以让得到的通讯器进行业务交流
}
finally
{
//重中之重,必须要释放通讯器
clientFactory.ReleaseTransferClient(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();