文档:新增Dmtp文件传输和Rpc鉴权授权课程链接

This commit is contained in:
若汝棋茗
2025-06-10 22:43:56 +08:00
parent a1aab630ca
commit 234197b9de
2 changed files with 41 additions and 1 deletions

View File

@@ -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) =>
{

View File

@@ -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"/>
## 四、鉴权授权策略的比较
好的,我们来详细比较一下随机字符串(通常指无结构会话令牌)和 JWTJSON 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"/>