mirror of
https://github.com/RRQM/TouchSocket.git
synced 2025-12-19 18:06:45 +08:00
文档:新增websocket课程链接
This commit is contained in:
@@ -79,6 +79,9 @@ Console.WriteLine($"使用:http://127.0.0.1:7789/ApiServer/Sum?a=10&b=20");
|
||||
```
|
||||
|
||||
<BilibiliCard title="初步搭建WebApi服务" link="https://www.bilibili.com/cheese/play/ep1688288" isPro="true"/>
|
||||
<BilibiliCard title="使用接口或实例类直接注册服务" link="https://www.bilibili.com/cheese/play/ep1709015" isPro="true"/>
|
||||
<BilibiliCard title="WebApi三种生命周期服务详解" link="https://www.bilibili.com/cheese/play/ep1709016" isPro="true"/>
|
||||
<BilibiliCard title="使用反射和源生成器注册所有服务" link="https://www.bilibili.com/cheese/play/ep1709017" isPro="true"/>
|
||||
|
||||
## 五、参数规则
|
||||
|
||||
@@ -267,6 +270,9 @@ public int SumCallContext(IWebApiCallContext callContext, int a, int b)
|
||||
:::
|
||||
|
||||
|
||||
<BilibiliCard title="在WebApi服务方法中获取调用上下文" link="https://www.bilibili.com/cheese/play/ep1709018" isPro="true"/>
|
||||
<BilibiliCard title="使用调用上下文完成获取IP、取消调用、日志记录等功能" link="https://www.bilibili.com/cheese/play/ep1709019" isPro="true"/>
|
||||
|
||||
### 7.1 获取当前客户端信息
|
||||
|
||||
一般来说,调用上下文的`Caller`就是实际通信的客户端,也就是`HttpSessionClient`。
|
||||
|
||||
@@ -5,6 +5,7 @@ title: 创建WebSocket客户端
|
||||
|
||||
import Tag from "@site/src/components/Tag.js";
|
||||
import CardLink from "@site/src/components/CardLink.js";
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
@@ -182,6 +183,8 @@ client.Logger.Info("通过ws://127.0.0.1:7789/postws连接成功");
|
||||
|
||||
客户端定义了一些发送方法,方便开发者快速发送数据。
|
||||
|
||||
<BilibiliCard title="使用ws完成基本的数据接收和发送" link="https://www.bilibili.com/cheese/play/ep1709023" isPro="true"/>
|
||||
|
||||
### 5.1 发送文本类消息
|
||||
|
||||
```csharp showLineNumbers
|
||||
@@ -368,11 +371,15 @@ using (var client = GetClient())
|
||||
|
||||
:::
|
||||
|
||||
<BilibiliCard title="使用ReadAsync的方式读取ws数据" link="https://www.bilibili.com/cheese/play/ep1709028" isPro="true"/>
|
||||
|
||||
|
||||
### 6.4 接收中继数据
|
||||
|
||||
`WebSocket`协议本身是支持超大数据包的,但是这些包不会一次性接收,而是分多次接收的,同时会通过`Opcode`来表明其为中继数据。
|
||||
|
||||
<BilibiliCard title="ws接收并处理中继数据" link="https://www.bilibili.com/cheese/play/ep1709029" isPro="true"/>
|
||||
|
||||
下面将演示接收文本数据。
|
||||
|
||||
【方法1】
|
||||
@@ -623,6 +630,9 @@ await client.PingAsync();
|
||||
await client.PongAsync();
|
||||
```
|
||||
|
||||
<BilibiliCard title="ws的Ping和Pong的使用" link="https://www.bilibili.com/cheese/play/ep1709027" isPro="true"/>
|
||||
|
||||
|
||||
:::tip 建议
|
||||
|
||||
`WebSocket`是双向通讯,所以支持客户端和服务器双向操作`Ping`和`Pong`报文。但是一般来说都是客户端执行`Ping`,服务器回应`Pong`。
|
||||
@@ -640,6 +650,8 @@ await client.PongAsync();
|
||||
})
|
||||
```
|
||||
|
||||
<BilibiliCard title="WebSocket的断线重连以及无人值守模式" link="https://www.bilibili.com/cheese/play/ep1709031" isPro="true"/>
|
||||
|
||||
## 八、关闭连接
|
||||
|
||||
在使用`WebSocket`时,如果想主动关闭连接,可以使用`CloseAsync`方法,同时可以携带一个关闭原因。
|
||||
@@ -656,6 +668,8 @@ await webSocket.CloseAsync("关闭");
|
||||
await webSocket.CloseAsync(WebSocketCloseStatus.EndpointUnavailable,"关闭");//状态码为1001,意为:服务端不可用。
|
||||
```
|
||||
|
||||
<BilibiliCard title="主动处理ws的Close报文" link="https://www.bilibili.com/cheese/play/ep1709025" isPro="true"/>
|
||||
|
||||
## 九、本文示例Demo
|
||||
|
||||
<CardLink link="https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/WebSocket/WebSocketConsoleApp"/>
|
||||
|
||||
@@ -3,6 +3,8 @@ id: websocketdescription
|
||||
title: 产品及架构介绍
|
||||
---
|
||||
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
命名空间:TouchSocket.Http.WebSockets <br/>
|
||||
@@ -12,6 +14,8 @@ title: 产品及架构介绍
|
||||
|
||||
- WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 <a name="Sdw1r"></a>
|
||||
|
||||
<BilibiliCard title="WebSocket协议特性解析" link="https://www.bilibili.com/cheese/play/ep1709020" isPro="true"/>
|
||||
|
||||
## 产品特点
|
||||
|
||||
- 简单易用。
|
||||
|
||||
@@ -3,6 +3,8 @@ id: websocketheartbeat
|
||||
title: Websocket心跳设置
|
||||
---
|
||||
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
命名空间:TouchSocket.Http.WebSockets <br/>
|
||||
@@ -12,6 +14,8 @@ title: Websocket心跳设置
|
||||
|
||||
Websocket拥有自己的心跳数据格式,和响应心跳格式,专业名词是Ping和Pong。所以依靠这两个,可以直接实现心跳。
|
||||
|
||||
<BilibiliCard title="使用ws的心跳数据包" link="https://www.bilibili.com/cheese/play/ep1709032" isPro="true"/>
|
||||
|
||||
## 二、心跳配置
|
||||
|
||||
#### 2.1 服务器配置
|
||||
|
||||
@@ -4,6 +4,7 @@ title: 创建WebSocket服务器
|
||||
---
|
||||
|
||||
import CardLink from "@site/src/components/CardLink.js";
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
@@ -58,6 +59,8 @@ await service.StartAsync();
|
||||
service.Logger.Info("服务器已启动");
|
||||
```
|
||||
|
||||
<BilibiliCard title="创建WebSocket服务器和客户端" link="https://www.bilibili.com/cheese/play/ep1709021" isPro="true"/>
|
||||
|
||||
### 4.2 验证连接
|
||||
|
||||
可以对连接的`Url`、`Query`、`Header`等参数进行验证,然后决定是否执行`WebSocket`连接。
|
||||
@@ -161,6 +164,8 @@ await service.StartAsync();
|
||||
service.Logger.Info("服务器已启动");
|
||||
```
|
||||
|
||||
<BilibiliCard title="使用WebApi等多种方法验证ws连接" link="https://www.bilibili.com/cheese/play/ep1709022" isPro="true"/>
|
||||
|
||||
【接收连接】
|
||||
|
||||
```csharp {16} showLineNumbers
|
||||
@@ -278,6 +283,8 @@ config.SetServiceSslOption(new ServiceSslOption() //Ssl配置,当为null的时
|
||||
|
||||
WebSocket服务器接收消息,目前有两种方式。第一种就是通过订阅`IWebSocketReceivedPlugin`插件完全异步的接收消息。第二种就是调用`WebSocket`,然后调用`ReadAsync`方法异步阻塞式读取。
|
||||
|
||||
<BilibiliCard title="使用ws完成基本的数据接收和发送" link="https://www.bilibili.com/cheese/play/ep1709023" isPro="true"/>
|
||||
|
||||
### 5.1 简单接收消息
|
||||
|
||||
【定义插件】
|
||||
@@ -424,6 +431,8 @@ class MyReadWebSocketPlugin : PluginBase, IWebSocketHandshakedPlugin
|
||||
}
|
||||
```
|
||||
|
||||
<BilibiliCard title="使用ReadAsync的方式读取ws数据" link="https://www.bilibili.com/cheese/play/ep1709028" isPro="true"/>
|
||||
|
||||
【使用】
|
||||
|
||||
```csharp {16}
|
||||
@@ -469,6 +478,8 @@ private static HttpService CreateHttpService()
|
||||
|
||||
`WebSocket`协议本身是支持超大数据包的,但是这些包不会一次性接收,而是分多次接收的,同时会通过`Opcode`来表明其为中继数据。
|
||||
|
||||
<BilibiliCard title="ws接收并处理中继数据" link="https://www.bilibili.com/cheese/play/ep1709029" isPro="true"/>
|
||||
|
||||
下面将演示接收文本数据。
|
||||
|
||||
【方法1】
|
||||
@@ -865,6 +876,8 @@ await webSocket.PingAsync();
|
||||
await webSocket.PongAsync();
|
||||
```
|
||||
|
||||
<BilibiliCard title="ws的Ping和Pong的使用" link="https://www.bilibili.com/cheese/play/ep1709027" isPro="true"/>
|
||||
|
||||
### 6.8 发送大数据
|
||||
|
||||
发送大数据时,需要分包发送,可以使用`SendAsync`的重载方法,设置`FIN`标志。
|
||||
@@ -900,6 +913,8 @@ await webSocket.CloseAsync("关闭");
|
||||
await webSocket.CloseAsync(WebSocketCloseStatus.EndpointUnavailable,"关闭");//状态码为1001,意为:服务端不可用。
|
||||
```
|
||||
|
||||
<BilibiliCard title="主动处理ws的Close报文" link="https://www.bilibili.com/cheese/play/ep1709025" isPro="true"/>
|
||||
|
||||
## 八、本文示例Demo
|
||||
|
||||
<CardLink link="https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/WebSocket/WebSocketConsoleApp"/>
|
||||
@@ -3,6 +3,8 @@ id: wscommandlineplugin
|
||||
title: 快捷事务命令行
|
||||
---
|
||||
|
||||
import BilibiliCard from '@site/src/components/BilibiliCard.js';
|
||||
|
||||
### 定义
|
||||
|
||||
命名空间:TouchSocket.Http.WebSockets <br/>
|
||||
@@ -12,6 +14,8 @@ title: 快捷事务命令行
|
||||
|
||||
快捷事务命令行,是用于**WebSocket**的快捷事务实现,让WS在**Text**文本中,用最简单的文字消息即可完成相关事务的执行。
|
||||
|
||||
<BilibiliCard title="WebSocket快捷事务命令行" link="https://www.bilibili.com/cheese/play/ep1709033" isPro="true"/>
|
||||
|
||||
## 二、使用
|
||||
|
||||
### 2.1 声明事务插件
|
||||
|
||||
Reference in New Issue
Block a user