创建NamedPipeClient
定义
命名空间:TouchSocket.NamedPipe
程序集:TouchSocket.NamedPipe.dll
一、说明
NamedPipeClient是命名管道系客户端基类,他直接参与管道的连接、发送、接收、处理、断开等,他的业务与服务器的NamedPipeSocketClient是一一对应的。
二、特点
- 简单易用。
- 内存池支持
- 高性能
- 适配器预处理,一键式解决分包、粘包、对象解析(即适用于Tcp的一切适配器)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于委托、插件驱动,让每一步都能执行AOP。
三、产品应用场景
- 所有本机IPC(进程通讯)基础使用场景:可跨平台、跨语言使用。
四、可配置项
可配置项
SetMaxPackageSize
数据包最大值(单位:byte),默认1024×1024×10。该值会在适当时间,直接作用DataHandlingAdapter.MaxPackageSize。
SetPipeName
设置管道名称。
UseDelaySender(暂未实现)
使用延迟发送。众所周知,tcp数据报文为了发送效率,会默认启用延迟算法。但是这种设置,只能一定程度的缓解小数据发送效率低的问题,因为它为了保证多线程发送的有序性,在send函数中设置了线程同步,所以说,每调用一次send,实际上都是巨大的性能消耗(此处用iocp发送亦然)。所以,要解决该问题, 最终还是要将小数据,组合成大数据,这样才能更高效率的发送。所以,DelaySender正是负责此类工作的。
使用DelaySender,会一定程度的降低发送的及时 性,但是降低程度并不高,简单来说:
如果一个包大于512kb,则不会延迟,直接发送。 如果发送第一个包,与第二个包的时间间隔小于一个线程池线程调度的时间(这个时间极短,一般来说会在10微秒左右),则会将这两个包压缩为一个包发送。
五、支持插件
插件方法 | 功能 |
---|---|
INamedPipeConnectingPlugin | 此时管道实际上已经完成连接,但是并没有启动接收,然后触发。 |
INamedPipeConnectedPlugin | 同意连接,且成功启动接收后触发 |
INamedPipeDisconnectingPlugin | 当客户端主动调用Close时触发 |
INamedPipeDisconnectedPlugin | 当客户端断开连接后触发 |
INamedPipeReceivingPlugin | 在收到原始数据时触发,所有的数据均在ByteBlock里面。 |
INamedPipeReceivedPlugin | 在收到适配器数据时触发,根据适配器类型,数据可能在ByteBlock或者IRequestInfo里面。 |
INamedPipeSendingPlugin | 当即将发送数据时,调用该方法在适配器之后,接下来即会发送数据。 |