文档:新增DmtpRpc部分课程链接

This commit is contained in:
若汝棋茗
2025-05-27 21:24:53 +08:00
parent 02df53f670
commit c822e72b42
5 changed files with 76 additions and 0 deletions

View File

@@ -3,6 +3,8 @@ id: dmtpbase
title: Dmtp基础功能
---
import BilibiliCard from '@site/src/components/BilibiliCard.js';
### 定义
命名空间TouchSocket.Dmtp <br/>
@@ -16,6 +18,8 @@ title: Dmtp基础功能
在服务器或客户端的配置上,设置`VerifyToken`,即可实现字符串`Token`验证。
<BilibiliCard title="使用Token、或动态验证连接" link="https://www.bilibili.com/cheese/play/ep1726372" isPro="true"/>
```csharp {4} showLineNumbers
var config = new TouchSocketConfig()
.SetDmtpOption(new DmtpOption()
@@ -175,6 +179,7 @@ DMTP基础功能是比较容易跨语言的但这并不意味着DMTP所有的
在Dmtp中存在于服务器的辅助客户端SessionClient与远程客户端Client是一一对应关系其Id也**完全一致**。所以在任意一方修改Id调用ResetId都会同时修改远程Id。所以合理使用该操作可以完成复用Id重置Id的需求。
<BilibiliCard title="Dmtp预设Id和重置Id" link="https://www.bilibili.com/cheese/play/ep1726373" isPro="true"/>
## 三、发送数据
@@ -184,6 +189,10 @@ Dmtp提供协议发送数据又叫协议扩展功能就是对现有的Dmtp
第一个参数为`ushort`类型,使用者可以**约定任意大于20数值**。
<BilibiliCard title="使用Dmtp发送协议数据" link="https://www.bilibili.com/cheese/play/ep1726375" isPro="true"/>
<BilibiliCard title="使用Dmtp发送IPackage数据" link="https://www.bilibili.com/cheese/play/ep1726376" isPro="true"/>
```csharp showLineNumbers
client.SendAsync(1000,Encoding.UTF8.GetBytes("RRQM"));
```
@@ -221,6 +230,10 @@ internal class MyFlagsPlugin : PluginBase, IDmtpReceivedPlugin
换言之,一个`DmtpActor`可以有**多个Channel**。多个`Channel`可以**同时进行传输**。并且数据互不干扰。
<BilibiliCard title="使用Channel发送数据" link="https://www.bilibili.com/cheese/play/ep1726377" isPro="true"/>
<BilibiliCard title="Dmtp路由转发Channel数据" link="https://www.bilibili.com/cheese/play/ep1726378" isPro="true"/>
### 4.1 特点
1. 每个`Channel`都有独立的Id所以多个`Channel`可以同时工作。

View File

@@ -5,6 +5,7 @@ title: 创建Dmtp客户端
import Tag from "@site/src/components/Tag.js";
import Pro from "@site/src/components/Pro.js";
import BilibiliCard from '@site/src/components/BilibiliCard.js';
### 定义
@@ -53,6 +54,8 @@ Dmtp客户端对应的也有不同协议的版本。各个版本之间功能
`TcpDmtpClient`对应`TcpDmtpService`服务器。基本创建如下,支持[创建TcpClient](./tcpclient.mdx)的所有配置。
<BilibiliCard title="创建Tcp协议的Dmtp客户端" link="https://www.bilibili.com/cheese/play/ep1726347" isPro="true"/>
```csharp showLineNumbers
var client = new TcpDmtpClient();
await client.SetupAsync(new TouchSocketConfig()
@@ -68,6 +71,8 @@ await client.ConnectAsync();
`UdpDmtp`对应`UdpDmtp`服务器,即`UdpDmtp`即是服务器,又是客户端。基本创建如下,支持[创建UdpSession](./udpsession.mdx)的所有配置。
<BilibiliCard title="创建Udp协议的Dmtp客户端" link="https://www.bilibili.com/cheese/play/ep1726349" isPro="true"/>
```csharp {1,4-6,11} showLineNumbers
var client = new UdpDmtp();
@@ -97,6 +102,8 @@ var client = new UdpDmtp();
`HttpDmtpClient`对应`HttpDmtpService`,或者`HttpMiddlewareDmtpService`服务器。基本创建如下,支持[创建HttpClient](./httpclient.mdx)的所有配置。
<BilibiliCard title="创建Http协议的Dmtp客户端" link="https://www.bilibili.com/cheese/play/ep1726352" isPro="true"/>
```csharp showLineNumbers
var client = new HttpDmtpClient();
await client.SetupAsync(new TouchSocketConfig()
@@ -110,6 +117,8 @@ await client.ConnectAsync();
### 4.4 WebSocketDmtpClient
<BilibiliCard title="创建WebSocket协议的Dmtp客户端" link="https://www.bilibili.com/cheese/play/ep1726355" isPro="true"/>
```csharp showLineNumbers
var websocketDmtpClient = new WebSocketDmtpClient();
websocketDmtpClient.Setup(new TouchSocketConfig()
@@ -180,6 +189,8 @@ finally
`NamedPipeDmtpClient`对应`NamedPipeDmtpService`服务器。基本创建如下,支持[创建NamedPipeClient](./namedpipeclient.mdx)的所有配置。
<BilibiliCard title="创建NamedPipe协议的Dmtp客户端" link="https://www.bilibili.com/cheese/play/ep1726360" isPro="true"/>
```csharp showLineNumbers
var client = new NamedPipeDmtpClient();
await client.SetupAsync(new TouchSocketConfig()

View File

@@ -3,6 +3,7 @@ id: dmtpdescription
title: 产品及架构介绍
---
import Pro from "@site/src/components/Pro.js";
import BilibiliCard from '@site/src/components/BilibiliCard.js';
### 定义
@@ -14,6 +15,8 @@ import Pro from "@site/src/components/Pro.js";
DMTPDuplex Message Transport Protocol双工消息传输协议是一个简单易用便捷高效且易于扩展的**二进制数据协议**。
<BilibiliCard title="Dmtp协议及应用场景详解" link="https://www.bilibili.com/cheese/play/ep1616806" isPro="true"/>
【协议格式】
|--Head--|--Flags--|--Length--|-----Data-----|

View File

@@ -3,6 +3,8 @@ id: dmtprpc
title: Rpc功能
---
import BilibiliCard from '@site/src/components/BilibiliCard.js';
### 定义
命名空间TouchSocket.Dmtp.Rpc <br/>
@@ -22,6 +24,12 @@ RPCRemote Procedure Call远程过程调用协议一种通过网络从
- 支持绝大多数数据类型及自定义实体类。
- 支持自定义序列化。
<BilibiliCard title="DmtpRpc简单介绍" link="https://www.bilibili.com/cheese/play/ep1742128" isPro="true"/>
<BilibiliCard title="完成DmtpRpc的基本调用" link="https://www.bilibili.com/cheese/play/ep1742130" isPro="true"/>
<BilibiliCard title="DmtpRpc的调用原理" link="https://www.bilibili.com/cheese/play/ep1742131" isPro="true"/>
## 二、使用Rpc服务
### 2.1 定义服务
@@ -144,6 +152,10 @@ bool result =client.GetDmtpRpcActor().InvokeT<bool>("Login", InvokeOption.WaitIn
代理调用的便捷在于,客户端不用再知道哪些服务可调,也不用再纠结调用的参数类型正不正确,因为这些,代理工具都会替你做好。
<BilibiliCard title="使用代理生成文件的方式调用DmtpRpc" link="https://www.bilibili.com/cheese/play/ep1742132" isPro="true"/>
<BilibiliCard title="使用源生成的方式调用DmtpRpc" link="https://www.bilibili.com/cheese/play/ep1742133" isPro="true"/>
详细步骤:
1. [生成代理文件](./rpcgenerateproxy.mdx)
@@ -288,6 +300,9 @@ client.GetDmtpRpcActor()的操作,内部还需要执行字典的查询操作
一般的rpc服务都是客户端发起服务器响应。但是有时候也需要服务器发起客户端响应所以需要反向rpc。
<BilibiliCard title="反向调用DmtpRpc" link="https://www.bilibili.com/cheese/play/ep1742134" isPro="true"/>
<BilibiliCard title="使用源生成反向调用DmtpRpc" link="https://www.bilibili.com/cheese/play/ep1742135" isPro="true"/>
### 3.1 定义、发布反向Rpc服务
实际上Dmtp的全称Duplex Message Transport Protocol双工消息传输协议Duplex意为双工则表明当Dmtp客户端连接到服务以后拥有与服务器同等的通讯权限与功能。所以客户端发布Rpc服务的步骤和服务器完全一致。即当客户端和服务器建立连接以后就不再区分谁是客户端谁是服务器了。只关心**谁能提供服务,谁在调用服务**。
@@ -402,6 +417,9 @@ partial class MyRpcServer : TransientRpcServer
除了Rpc反向RpcDmtpRpc还支持**客户端**之间互Call Rpc。服务的定义与Rpc一样。
<BilibiliCard title="客户端互CallRpc" link="https://www.bilibili.com/cheese/play/ep1742136" isPro="true"/>
<BilibiliCard title="使用源生成客户端互CallRpc" link="https://www.bilibili.com/cheese/play/ep1742137" isPro="true"/>
### 4.1 互Call RPC
客户端1调用客户端2的方法需要知道对方的**Id**。然后和调用Rpc方法一致。然后使用下列函数调用即可。
@@ -480,6 +498,8 @@ FeedbackType是调用反馈类型其枚举值分别有OnlySend、WaitSend、W
- `WaitSend`意为发送Rpc请求并等待**接收**结果。即返回时仅表示对方收到了Rpc请求但是具体执行如何则不可知。这一般在不可靠协议中是有用的。
- `WaitInvoke`意为发送Rpc请求并等待**执行**结果。即返回时表示对方已经执行了Rpc请求如果有执行返回值则携带返回值。如果执行过程发生异常则会将异常返回。
<BilibiliCard title="FeedbackType详解和性能对比测试" link="https://www.bilibili.com/cheese/play/ep1742138" isPro="true"/>
### 5.2 SerializationType
`SerializationType`是序列化类型,其枚举值有`FastBinary`、`Json`、`Xml`、`SystemBinary`。其特点如下:
@@ -496,6 +516,14 @@ FeedbackType是调用反馈类型其枚举值分别有OnlySend、WaitSend、W
- JsonSerializerSettingsJson序列化设置属性
- SerializationBinder系统二进制序列化绑定器
<BilibiliCard title="DmtpRpc使用4种序列化的场景分析" link="https://www.bilibili.com/cheese/play/ep1742141" isPro="true"/>
<BilibiliCard title="配置默认序列化选择器和使用Fast序列化的源生成" link="https://www.bilibili.com/cheese/play/ep1742143" isPro="true"/>
<BilibiliCard title="在DmtpRpc种使用SystemTextJson源生成" link="https://www.bilibili.com/cheese/play/ep1742144" isPro="true"/>
<BilibiliCard title="自定义序列化并且使用MemoryPack实践" link="https://www.bilibili.com/cheese/play/ep1742145" isPro="true"/>
例如:
```csharp showLineNumbers
@@ -749,6 +777,8 @@ var invokeOption = new DmtpInvokeOption()//调用配置
Timeout是超时时间单位是毫秒。
<BilibiliCard title="DmtpRpc的超时设定和CancellationTok" link="https://www.bilibili.com/cheese/play/ep1742140" isPro="true"/>
### 5.4 CancellationToken
CancellationToken是取消令箭源可用于取消Rpc的调用。
@@ -780,6 +810,8 @@ client.Logger.Info($"调用Add方法成功结果{sum}");
Metadata是字符串键值对其作用类似http的headers用于传递一些附加信息。
<BilibiliCard title="使用Dmtp的Metadata传递自定义消息" link="https://www.bilibili.com/cheese/play/ep1742139" isPro="true"/>
在请求时可以通过DmtpInvokeOption进行传参。
```csharp {6} showLineNumbers
@@ -808,6 +840,9 @@ public Metadata CallContextMetadata(IDmtpRpcCallContext callContext)
> **在Rpc中并没有对传输的数据做限制但是因为Rpc默认使用的固定包头适配器中默认设置的可传递数据为10Mb所以在Rpc中用户可一次性传递的数据包大约为9.9Mb。所以如果用户传递超出阈值的数据适配器则会触发异常而无法接收。但在实际上Rpc的使用中大数据的传输也是很重要的一个环节所以在此做了大数据的传输思路建议希望能有效解决大家的麻烦。**
<BilibiliCard title="DmtpRpc结合Channel发送和接受大数据包" link="https://www.bilibili.com/cheese/play/ep1742147" isPro="true"/>
<a name="DU9Pj"></a>
### 6.1 设置适配器参数(推荐指数:⭐)

View File

@@ -5,6 +5,7 @@ title: 创建Dmtp服务器
import Tag from "@site/src/components/Tag.js";
import Pro from "@site/src/components/Pro.js";
import BilibiliCard from '@site/src/components/BilibiliCard.js';
### 定义
@@ -16,6 +17,7 @@ import Pro from "@site/src/components/Pro.js";
Dmtp的服务器有多种形式的host每种服务器的创建都大同小异且功能基本一致。
<BilibiliCard title="新创建Dmtp服务器项目" link="https://www.bilibili.com/cheese/play/ep1726345" isPro="true"/>
## 二、服务器架构
@@ -59,6 +61,8 @@ Dmtp服务器的架构与其所属的基础协议架构一致例如在基
`TcpDmtpService`是基于`Tcp`协议的Dmtp。在可配置的基础之上还可以配置与[TcpService可配置项](./tcpservice.mdx)相关的配置。
<BilibiliCard title="创建Tcp协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726346" isPro="true"/>
```csharp showLineNumbers
var service = new TcpDmtpService();
var config = new TouchSocketConfig()//配置
@@ -83,6 +87,8 @@ service.Logger.Info($"{service.GetType().Name}已启动");
`UdpDmtp`是基于`Udp`协议Dmtp。在可配置的基础之上还可以配置与[UdpSession可配置项](./udpsession.mdx)相关的配置。
<BilibiliCard title="创建Udp协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726348" isPro="true"/>
```csharp showLineNumbers
var udpDmtp = new UdpDmtp();
@@ -108,6 +114,8 @@ await udpDmtp.StartAsync();
`HttpDmtpService`是基于`Http`升级协议。在该解析器中,配置设置[HttpService](./httpservice.mdx)一致。
<BilibiliCard title="创建Http协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726350" isPro="true"/>
```csharp showLineNumbers
var service = new HttpDmtpService();
var config = new TouchSocketConfig()//配置
@@ -137,6 +145,8 @@ service.Logger.Info($"{service.GetType().Name}已启动");
3. `IApplicationBuilder`必须先使用`UseWebSockets`。
4. `IApplicationBuilder`调用`UseWebSocketDmtp`并传入url设置。
<BilibiliCard title="创建WebSocket协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726354" isPro="true"/>
在Services时添加`AddWebSocketDmtpService`,并且配置相关项。
```csharp {3} showLineNumbers
@@ -175,6 +185,8 @@ app.UseWebSocketDmtp("/WebSocketDmtp");//WebSocketDmtp必须在UseWebSockets之
2. `IServiceCollection`添加`AddHttpMiddlewareDmtpService`并进行相关配置不用配置端口会和asp使用同一端口
3. `IApplicationBuilder`调用`UseHttpDmtp`。
<BilibiliCard title="创建基于AspNetCore的Http协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726353" isPro="true"/>
在Services时添加`AddWebSocketDmtpService`,并且配置相关项。
```csharp showLineNumbers
@@ -224,6 +236,8 @@ builder.Services.ConfigureContainer(container =>
这是基于`NamedPipe`的Dmtp。在可配置的基础之上还可以配置与[NamedPipeService可配置项](./namedpipeservice.mdx)相关的配置。
<BilibiliCard title="创建NamedPipe协议的Dmtp服务器" link="https://www.bilibili.com/cheese/play/ep1726356" isPro="true"/>
```csharp showLineNumbers
var service = new NamedPipeDmtpService();
var config = new TouchSocketConfig()//配置