小文件传输
一、说明
小文件传输是指,当传输文件小于设定大小(默认1024*1024字节)时的传输。
为什么要设立小文件传输?与常规文件传输相比,优点在哪里? 常规传输,建立一个传输通道,大约需要传输两端,往返通信4-6次。这在本地局域网中,显得无所谓。但是在互联网环境中,一次ping延迟平均50ms,那么建立一个传输,就大约需要200-300ms。这也就意味着,即使一个文件只有一字节,也需要这些时间。所以,这明显是不合理的。所以TouchRpc又新增了小文件传输,只要文件在1Mb以内,仅往返1次,就可以完成传输。
当然,对于小文件的最高效传输方式依然是先压缩,后传输的方式。
二、使用
【拉取文件】
- 直接调用PullSmallFile或者PullSmallFileAsync,获取到实际的文件数据。
- 通过Save方法,将数据写入文件。也可以自行保存。
var result = await this.fileClient.PullSmallFileAsync(path);//拉取文件
var saveResult = result.Save(savePath);//将拉取的数据进行保存。
【推送文件】
- 直接调用PushSmallFile或者PushSmallFileAsync。
- 返回值即表示是否成功。
var result = await this.fileClient.PushSmallFileAsync(savePath, fileInfo);
if (result.IsSuccess())
{
}
其他可选参数可以自己定义。
三、客户端之间传输
该功能也支持客户端之间互相传输。使用方法基本一致,需要额外指定目标Id即可。
此外,服务器也需要同意路由
internal class MyTouchRpcPlugin : TouchRpcPluginBase
{
protected override void OnRouting(ITouchRpc client, PackageRouterEventArgs e)
{
if (e.RouterType== RouteType.PushFile||e.RouterType== RouteType.PullFile)
{
e.IsPermitOperation = true;
}
base.OnRouting(client, e);
}
}