创建NamedPipeClient
定义
命名空间:TouchSocket.NamedPipe
程序集:TouchSocket.NamedPipe.dll
一、说明
NamedPipeClient是命名管道系客户端基类,他直接参与管道的连接、发送、接收、处理、断开等,他的业务与服务器的NamedPipeSessionClient是一一对应的。
二、特点
- 简单易用。
- 内存池支持
- 高性能
- 适配器预处理,一键式解决分包、粘包、对象解析(即适用于Tcp的一切适配器)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于委托、插件驱动,让每一步都能执行AOP。
三、产品应用场景
- 所有本机IPC(进程通讯)基础使用场景:可跨平台、跨语言使用。
四、可配置项
可配置项
五、支持插件
插件方法 | 功能 |
---|---|
INamedPipeConnectingPlugin | 此时管道实际上已经完成连接,但是并没有启动接收,然后触发。 |
INamedPipeConnectedPlugin | 同意连接,且成功启动接收后触发 |
INamedPipeClosingPlugin | 当客户端主动调用Close时触发 |
INamedPipeClosedPlugin | 当客户端断开连接后触发 |
INamedPipeReceivingPlugin | 在收到原始数据时触发,所有的数据均在ByteBlock里面。 |
INamedPipeReceivedPlugin | 在收到适配器数据时触发,根据适配器类型,数据可能在ByteBlock或者IRequestInfo里面。 |
INamedPipeSendingPlugin | 当即将发送数据时,调用该方法在适配器之后,接下来即会发送数据。 |
六、创建NamedPipeClient
6.1 简单创建
简单的处理逻辑可通过Connecting、Connected、Received等委托直接实现。
代码如下:
var client = new NamedPipeClient();
client.Connecting = (client, e) => { return EasyTask.CompletedTask; };//即将连接到服务器,此时已经创建管道,但是还未建立连接
client.Connected = (client, e) => { return EasyTask.CompletedTask; };//成功连接到服务器
client.Closing = (client, e) => { return EasyTask.CompletedTask; };//即将从服务器断开连接。此处仅主动断开才有效。
client.Closed = (client, e) => { return EasyTask.CompletedTask; };//从服务器断开连接,当连接不成功时不会触发。
client.Received = (client, e) =>
{
//从服务器收到信息。但是一般byteBlock和requestInfo会根据适配器呈现不同的值。
string mes = e.ByteBlock.Span.ToString(Encoding.UTF8);
client.Logger.Info($"客户端接收到信息:{mes}");
return EasyTask.CompletedTask;
};
//载入配置
await client.SetupAsync(new TouchSocketConfig()
.SetPipeName("TouchSocketPipe")//设置命名管道名称
.ConfigureContainer(a =>
{
a.AddConsoleLogger();//添加一个日志注入
}));
await client.ConnectAsync();//调用连接,当连接不成功时,会抛出异常。
//Result result =await client.TryConnectAsync();//或者可以调用TryConnect
//if (result.IsSuccess())
//{
//}
client.Logger.Info("客户端成功连接");