创建TouchRpc客户端
一、说明
TouchRpc客户端对应的,也有四种不同协议的版本。
二、可配置项
可配置项
三、支持插件接口
声明自定义实例类,然后实现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客户端工厂,分别为TcpTouchRpcClientFactory
,HttpTouchRpcClientFactory
。两者工作流程及配置基本相同,下面以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和多线程文件传输的接口,所以和其他客户端相比,本身不具备其他的功能。但是可以通过单个通讯器进行其他业务的交互。