mirror of
https://github.com/RRQM/TouchSocket.git
synced 2025-12-21 02:46:43 +08:00
文档:新增Dmtp文件传输和Rpc鉴权授权课程链接
This commit is contained in:
@@ -6,6 +6,7 @@ title: 传输文件
|
||||
import Tag from "@site/src/components/Tag.js";
|
||||
import Pro from "@site/src/components/Pro.js";
|
||||
import CardLink from "@site/src/components/CardLink.js";
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
@@ -29,6 +30,8 @@ import CardLink from "@site/src/components/CardLink.js";
|
||||
- 支持传输限速。
|
||||
- 支持文件多链路、多线程传输 <Pro/> 。
|
||||
|
||||
<BilibiliCard title="Dmtp文件传输特点说明" link="https://www.bilibili.com/cheese/play/ep1774676" isPro="true"/>
|
||||
|
||||
## 二、支持插件
|
||||
|
||||
| 插件方法| 功能 |
|
||||
@@ -50,6 +53,8 @@ import CardLink from "@site/src/components/CardLink.js";
|
||||
|
||||
## 五、传输流程及名词介绍
|
||||
|
||||
<BilibiliCard title="Dmtp文件传输配置,显示传输进度、速度等" link="https://www.bilibili.com/cheese/play/ep1774691" isPro="true"/>
|
||||
|
||||
### 5.1 响应流程
|
||||
|
||||
1. 请求端(可能是客户端,也可能是服务器)调用Pull(请求)或Push(推送)。
|
||||
@@ -212,6 +217,7 @@ internal class MyPlugin : PluginBase, IDmtpFileTransferringPlugin, IDmtpFileTran
|
||||
|
||||
### 6.1 客户端向服务器请求文件
|
||||
|
||||
<BilibiliCard title="客户端从服务器拉取文件" link="https://www.bilibili.com/cheese/play/ep1774679" isPro="true"/>
|
||||
|
||||
【客户端代码】
|
||||
|
||||
@@ -253,6 +259,8 @@ IResult result =await client.GetDmtpFileTransferActor().PullFileAsync(fileOperat
|
||||
|
||||
### 6.2 客户端向服务器推送文件
|
||||
|
||||
<BilibiliCard title="客户端推送文件到服务器" link="https://www.bilibili.com/cheese/play/ep1774693" isPro="true"/>
|
||||
|
||||
```csharp showLineNumbers
|
||||
var filePath = "ClientPushFileFromService.Test";
|
||||
var saveFilePath = "SaveClientPushFileFromService.Test";
|
||||
@@ -291,6 +299,8 @@ IResult result =await client.GetDmtpFileTransferActor().PushFileAsync(fileOperat
|
||||
|
||||
### 6.3 服务器向客户端请求文件
|
||||
|
||||
<BilibiliCard title="服务器主动向客户端推送、拉取文件" link="https://www.bilibili.com/cheese/play/ep1774696" isPro="true"/>
|
||||
|
||||
服务器主动向客户端请求文件,必须通过Id,找到其`SessionClient`的派生类。
|
||||
|
||||
```csharp showLineNumbers
|
||||
@@ -382,6 +392,8 @@ IResult result =await SessionClient.GetDmtpFileTransferActor().PushFileAsync(fil
|
||||
|
||||
### 6.5 客户端之间传输文件
|
||||
|
||||
<BilibiliCard title="客户端之间直接推送、拉取文件" link="https://www.bilibili.com/cheese/play/ep1774699" isPro="true"/>
|
||||
|
||||
该功能支持客户端之间传输文件,使用方法基本一致,只需要在请求`PullFile`或者`PushFile`时额外增加目标Id即可。
|
||||
|
||||
此外,**响应中介(一般是服务器)**需要添加`路由策略`和`同意路由`。
|
||||
@@ -425,6 +437,8 @@ internal class MyPlugin : PluginBase, IDmtpRoutingPlugin
|
||||
1. 当本次传输失败、或主动取消时,可以保存`fileOperator.ResourceInfo`对象属性。
|
||||
2. 当下次再次请求传输时,可以将已保存的`ResourceInfo`对象,先赋值给`fileOperator.ResourceInfo`属性。那么如果保存路径一致,且文件大小符合续传要求,则可以继续传输。
|
||||
|
||||
<BilibiliCard title="Dmtp文件传输断点续传、暂停传输" link="https://www.bilibili.com/cheese/play/ep1774701" isPro="true"/>
|
||||
|
||||
```csharp showLineNumbers
|
||||
//关于断点续传
|
||||
//在执行完PullFile(fileOperator)或PushFile(fileOperator)时。只要返回的结果不是Success。
|
||||
@@ -528,6 +542,7 @@ IResult result =await SessionClient.GetDmtpFileTransferActor().PullFileAsync(fil
|
||||
|
||||
常规传输,建立一个传输通道,大约需要传输两端,往返通信4-6次。这在本地局域网中,显得无所谓。但是在互联网环境中,一次ping延迟平均50ms,那么建立一个传输,就大约需要200-300ms。这也就意味着,即使一个文件只有一字节,也需要200ms-300。所以,这明显是不合理的。所以又新增了小文件传输,只要文件在1Mb以内,仅往返1次,就可以完成传输。
|
||||
|
||||
<BilibiliCard title="Dmtp小文件传输" link="https://www.bilibili.com/cheese/play/ep1774703" isPro="true"/>
|
||||
|
||||
### 9.1 拉取小文件
|
||||
|
||||
@@ -594,6 +609,7 @@ if (result.IsSuccess())
|
||||
|
||||
例如,我自己租的一个单核云服务器,它的单个连接速率只有1Mb,但是弹性带宽却有10Mb。宏观表象就是,一个客户端连接时,可以用1Mb带宽,两个客户端连接时,就可以用2Mb。那么这时候,多线程传输就显得格外重要了。
|
||||
|
||||
<BilibiliCard title="Dmtp多线程拉取、推送文件" link="https://www.bilibili.com/cheese/play/ep1774717" isPro="true"/>
|
||||
|
||||
### 10.1 创建多链路连接器
|
||||
|
||||
@@ -726,6 +742,9 @@ IResult result =await clientFactory.PushFileAsync(fileOperator);
|
||||
【获取目标传输客户端的Id集合】
|
||||
在TcpDmtpClientFactory属性中,有个OnFindTransferIds。通过实现该属性,使其能够获取到对应客户端的传输客户端Id集合(下列代码为模拟值,要具体实现该功能,还得自行实现)。
|
||||
|
||||
<BilibiliCard title="Dmtp多线程端对端传输文件(1)" link="https://www.bilibili.com/cheese/play/ep1774718" isPro="true"/>
|
||||
<BilibiliCard title="Dmtp多线程端对端传输文件(2)" link="https://www.bilibili.com/cheese/play/ep1774724" isPro="true"/>
|
||||
|
||||
```csharp showLineNumbers
|
||||
clientFactory.SetFindTransferIds((client, targetId) =>
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@ id: rpcauthorization
|
||||
title: Rpc鉴权授权策略
|
||||
---
|
||||
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
## 一、说明
|
||||
|
||||
@@ -18,18 +19,26 @@ title: Rpc鉴权授权策略
|
||||
1. 基于随机字符串的Token
|
||||
2. 基于结构化的Token(例如:JWT)
|
||||
|
||||
<BilibiliCard title="Rpc鉴权授权说明" link="https://www.bilibili.com/cheese/play/ep1779905" isPro="true"/>
|
||||
|
||||
## 二、基于会话的鉴权授权策略
|
||||
|
||||
基于会话的鉴权授权策略,一般是只应用于面向连接的通信。一般的这种通信具有持久化的特性,并且是有状态的。
|
||||
|
||||
<BilibiliCard title="Rpc基于会话完成鉴权授权" link="https://www.bilibili.com/cheese/play/ep1779908" isPro="true"/>
|
||||
|
||||
## 三、基于Token的鉴权授权策略
|
||||
|
||||
基于Token的鉴权授权策略,一般用于面向消息的通信。
|
||||
|
||||
### 3.1 基于随机字符串的Token
|
||||
|
||||
<BilibiliCard title="Rpc基于随机字符串完成鉴权授权" link="https://www.bilibili.com/cheese/play/ep1779913" isPro="true"/>
|
||||
|
||||
### 3.2 基于结构化的Token(例如:JWT)
|
||||
|
||||
<BilibiliCard title="Rpc基于jwt完成鉴权授权" link="https://www.bilibili.com/cheese/play/ep1779922" isPro="true"/>
|
||||
|
||||
## 四、鉴权授权策略的比较
|
||||
|
||||
好的,我们来详细比较一下随机字符串(通常指无结构会话令牌)和 JWT(JSON Web Token)的优缺点以及适用场景。
|
||||
@@ -139,8 +148,20 @@ title: Rpc鉴权授权策略
|
||||
|
||||
### 5.1 客户端使用HttpClient请求授权
|
||||
|
||||
<BilibiliCard title="客户端使用HttpClient请求授权" link="https://www.bilibili.com/cheese/play/ep1779934" isPro="true"/>
|
||||
|
||||
### 5.2 客户端使用WebApiClient请求授权
|
||||
|
||||
<BilibiliCard title="客户端使用WebApiClient请求授权" link="https://www.bilibili.com/cheese/play/ep1779935" isPro="true"/>
|
||||
|
||||
### 5.3 客户端使用DmtpRpc请求授权
|
||||
|
||||
### 5.4 客户端使用通用Rpc请求授权
|
||||
<BilibiliCard title="客户端使用DmtpRpc请求授权" link="https://www.bilibili.com/cheese/play/ep1779937" isPro="true"/>
|
||||
|
||||
### 5.4 客户端使用通用Rpc请求授权
|
||||
|
||||
<BilibiliCard title="通用Rpc请求授权" link="https://www.bilibili.com/cheese/play/ep1779955" isPro="true"/>
|
||||
|
||||
### 5.5 基于角色的授权
|
||||
|
||||
<BilibiliCard title="基于角色的授权" link="https://www.bilibili.com/cheese/play/ep1779956" isPro="true"/>
|
||||
|
||||
Reference in New Issue
Block a user