跳到主要内容
版本:1.3.9

创建TouchRpc客户端

一、说明

TouchRpc客户端对应的,也有四种不同协议的版本。

二、可配置项

可配置项

SetVerifyTimeout

设置验证超时时间,默认3000ms。(仅TcpTouchRpc可用) 。

SetVerifyToken

设置验证口令。

SetHeartbeatFrequency

设置心跳。默认为间隔2000ms,连续3次无响应即视为断开。

SetSerializationSelector

设置序列化选择器。

SetResponseType

设置允许的响应类型

SetRootPath

设置根路径

SetDefaultId

设置客户端的默认Id

SetMetadata

设置连接时的元数据组

三、支持插件接口

声明自定义实例类,然后实现ITouchRpcPlugin接口,即可实现下列事务的触发。 或者继承自TouchRpcPluginBase类,重写相应方法即可。

插件方法功能
OnHandshaking客户端在验证连接。默认情况下,框架会首先验证连接Token是否正确,如果不正确则直接拒绝。不会有任何投递。用户也可以使用Metadata进行动态验证。
OnHandshaked客户端完成连接验证
OnFileTransfering在文件传输即将进行时触发。
OnFileTransfered当文件传输结束之后。并不意味着完成传输,请通过e.Result属性值进行判断。
OnLoadingStream在远程请求加载流时触发。
OnReceivedProtocolData收到协议数据
OnRemoteAccessing在远程操作访问之前。
OnRemoteAccessed在远程操作访问之后。
OnRouting当需要转发路由包时。一般所有的客户端之间的数据传输,都需要经过该函数的运行。
OnStreamTransfering即将接收流数据,用户需要在此事件中对e.Bucket初始化。
OnStreamTransfered流数据处理,用户需要在此事件中对e.Bucket手动释放。 当流数据传输结束之后。并不意味着完成传输,请通过e.Result属性值进行判断。

四、创建

4.1 TcpTouchRpcClient

基本创建如下,支持创建TcpClient的所有配置。

TcpTouchRpcClient client = new TcpTouchRpcClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetVerifyToken("TouchRpc"));
client.Connect();

4.2 HttpTouchRpcClient

基本创建如下,支持创建TcpClient的所有配置。

HttpTouchRpcClient client = new HttpTouchRpcClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("127.0.0.1:7789")
.SetVerifyToken("TouchRpc"));
client.Connect();

4.3 UdpTouchRpc

基本创建如下,支持@的所有配置。

UdpTouchRpc client = new UdpTouchRpc();
client.Setup(new TouchSocketConfig()
.SetBindIPHost(7794)
.SetRemoteIPHost("127.0.0.1:7789"));//设置目标地址。
client.Start();

4.4 WSTouchRpcClient

 WSTouchRpcClient client = new WSTouchRpcClient();
client.Setup(new TouchSocketConfig()
.SetRemoteIPHost("ws://127.0.0.1:5000/wstouchrpc"));
client.ConnectAsync();

4.5 TouchRpcClient工厂

TouchRpcClient工厂工作模式是一种,由单个主通讯连接和多个传输通讯连接组成的连接池。默认提供了两种类型的Rpc客户端工厂,分别为TcpTouchRpcClientFactoryHttpTouchRpcClientFactory。两者工作流程及配置基本相同,下面以TcpTouchRpcClientFactory为例。

【创建】

var clientFactory = new TcpTouchRpcClientFactory()
{
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);
}
提示

TouchRpcClient工厂只实现了IRpcClient和多线程文件传输的接口,所以和其他客户端相比,本身不具备其他的功能。但是可以通过单个通讯器进行其他业务的交互。