跳到主要内容
版本:2.0

创建Dmtp客户端

定义

命名空间:TouchSocket.Dmtp
程序集:TouchSocket.Dmtp.dll
程序集:TouchSocketPro.Dmtp.dll

一、说明

Dmtp客户端对应的,也有不同协议的版本。各个版本之间功能基本一致。

二、可配置项

可配置项

SetDmtpOption

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

  • VerifyToken:设置验证口令。
  • Id:连接时指定Id。
  • Metadata:连接时指定元数据。可以在连接时,指定一些字符串键值对。

三、支持插件接口

声明自定义实例类,然后实现所需插件接口,即可实现事务的触发。

插件方法功能
IDmtpHandshakingPlugin客户端在验证连接。默认情况下,框架会首先验证连接Token是否正确,如果不正确则直接拒绝。不会有任何投递。用户也可以使用Metadata进行动态验证。
IDmtpHandshakedPlugin客户端完成握手连接验证
IDmtpReceivedPlugin在收到Dmtp格式的数据包时触发
IDmtpRoutingPlugin当需要路由数据时触发,并且必须返回e.IsPermitOperation=true时,才允许路由
IDmtpCreateChannelPlugin在收到创建通道的请求时候触发。
提示

一般情况下,如果声明的类没有基类型,则可以考虑继承PluginBase,这样可以简化实现接口的一些工作。

四、创建

4.1 TcpDmtpClient

TcpDmtpClient对应TcpDmtpService服务器。基本创建如下,支持创建TcpClient的所有配置。

var client = new TcpDmtpClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();

4.2 UdpDmtp

UdpDmtp对应UdpDmtp服务器,即UdpDmtp即是服务器,又是客户端。基本创建如下,支持创建UdpSession的所有配置。

var client = new UdpDmtp();

client.Setup(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();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();

4.4 WebSocketDmtpClient

var websocketDmtpClient = new WebSocketDmtpClient();
websocketDmtpClient.Setup(new TouchSocketConfig()
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
})
.SetRemoteIPHost("ws://localhost:5174/WebSocketDmtp"));
await websocketDmtpClient.ConnectAsync();

基于Aspnetcore的Dmtp示例Demo

4.5 DmtpClient工厂

DmtpClient工厂工作模式是一种,由单个主通讯连接和多个传输通讯连接组成的连接池。默认提供了两种类型的客户端工厂,分别为TcpDmtpClientFactoryHttpDmtpClientFactory。两者工作流程及配置基本相同,下面以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();
client.Setup(new TouchSocketConfig()
.SetPipeName("TouchSocketPipe")//设置管道名称
.SetDmtpOption(new DmtpOption()
{
VerifyToken = "Dmtp"
}));
client.Connect();

基于NamedPipe的Dmtp示例Demo